Skip to main content
 首页 » 编程设计

python之使用 AJAX 部署的 Flask 应用程序文件上传权限被拒绝

2025年05月04日31mengfanrong

我的文件上传在内置的 Flask 服务器上运行完美,但是当我部署它 (Apache2) 时文件上传中断。

flask python代码:

@app.route('/uploadajax', methods=['POST', 'GET']) 
def upload(): 
    file = request.files['file'] 
 
    if file and allowed_file(file.filename): 
        filename = secure_filename(file.filename) 
        file.save('TEST.pdf') 
 
    return jsonify({'filename':'http://www.michigan.gov/documents/sprsConnectionsVol5No1_15852_7.pdf'}) 

Javascript:

$(function() { 
    $('#upload-file-btn').click(function() { 
        var form_data = new FormData($('#upload-file')[0]) 
        $.ajax({ 
            type: 'POST', 
            url: SCRIPT_ROOT + '/uploadajax', 
            data: form_data, 
            contentType: false, 
            cache: false, 
            processData: false, 
            async: false, 
            success: function(data) { 
                console.log('Loaded questions successfully.') 
                packet_frame = '<iframe src="http://docs.google.com/viewer?url=' + encodeURI(data['filename']) + '&embedded=true" width="100%" height="260" style="border: none;"></iframe>' 
            } 
        }) 
    }) 
}) 

如果我注释掉 file.save('...') 行就没有错误。具体报错是

[Sat Nov 30 20:43:21 2013] [error] [client 66.75.0.4]     file.save('TEST.pdf'), referer: http://mydomain.com/ 
[Sat Nov 30 20:43:21 2013] [error] [client 66.75.0.4]   File "/usr/local/lib/python2.6/dist-packages/werkzeug/datastructures.py", line 2576, in save, referer: http://mydomain.com/ 
[Sat Nov 30 20:43:21 2013] [error] [client 66.75.0.4]     dst = open(dst, 'wb'), referer: http://mydomain.com/ 
[Sat Nov 30 20:43:21 2013] [error] [client 66.75.0.4] IOError: [Errno 13] Permission denied: 'TEST.pdf', referer: http://mydomain.com/ 

我认为这不会发生,因为我只写入一个子目录而不是根目录,但仍然存在权限被拒绝的错误。有帮助吗?

请您参考如下方法:

您正在保存一个没有路径信息的文件。这意味着它将保存在当前工作目录中,无论 Apache 进程位于何处。您在那里没有写权限。这个工作目录几乎可以肯定不是您的项目代码的存储位置。

指定文件的路径。您可以使用基于当前模块的目录(os.path.dirname(__file__) 是当前模块的目录),或者为您的应用程序配置目标路径。

您可能想研究 Uploading Files pattern在这种情况下。