Flask,在Javascript中提供静态文件和/或文件夹

时间:2016-02-09 03:46:36

标签: javascript jquery python flask jinja2

我试图在javascript中为静态文件夹插入以下静态URL,以便它可以正确加载已保存的文件,但我仍然面临错误。

以下是发生的事情。

普通文件位置为http://localhost/static/uploads/filename.ext但是使用以下javascript,它会根据视图获取位置' url_prefix =' /媒体'因此它提取的网址是http://localhost/media/static/uploads/filename.ext

这是以下代码:

    <script>
$(function(){
        $('#fileupload').fileupload({
            url: 'upload',
            dataType: 'json',
            add: function (e, data) {
                data.submit();
            },
            success:function(response,status) {
            console.log(response.filename);
            var filePath = 'static/uploads/' + response.filename;

            $('#imgUpload').attr('src',filePath);
            $('#filePath').val(filePath);
                console.log('success');
            },
            error:function(error){
                console.log(error);
            }
        });
})

我想替换,

var filePath = 'static/uploads/' + response.filename;

var filePath =  {{ url_for('static', filename='/uploads/') }} + response.filename;

但没有成功。原始文件名设置会导致蓝图url_prefix,我想绕过它。

修改

这是我的观点

@media.route('/upload', methods=['GET', 'POST'])
def upload():
    if request.method == 'POST':
        file = request.files['file']
        extension = os.path.splitext(file.filename)[1]
        f_name = str(uuid.uuid4()) + extension
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], f_name))
        return json.dumps({'filename':f_name})

2 个答案:

答案 0 :(得分:1)

这里有两条路可供考虑,你需要密切关注你在哪里使用:

  1. 服务器上的绝对文件路径,例如:/opt/myapp/media/upload/<filename>
  2. 客户端上的相对urlpath,例如:https://localhost/static/upload/<filename>
  3. 您最简单的解决方案可能是简单地返回文件名,而不使用任何目录前样本,然后为您使用它的上下文添加相应的目录。

    所以在python中你仍然可以返回&#39; somefile.jpg&#39;用:

    return json.dumps({'filename': f_name})
    

    在javascript中你可以参考&#39; /static/uploads/somefile.jpg'用:

    var filepath = '/static/uploads/' + response.filename;
    

答案 1 :(得分:0)

好吧,我已经解决了这个问题,我已经删除了url_prefix参数,所以我可以从根URL路径调用。避免上一期。