[英]Permission denied on deployed Flask app file upload using AJAX
我的文件上传在内置的 Flask 服务器上运行良好,但是在我部署它(Apache2)时文件上传中断了。
烧瓶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/
我认为这不会发生,因为我只是在写入子目录而不是 root,但仍然存在权限被拒绝错误。 有什么帮助吗?
您正在保存一个没有路径信息的文件。 这意味着它将保存在当前工作目录中,无论 Apache 进程在哪里。 您在那里没有写权限。 这个工作目录是几乎肯定不一样的地方为你的项目代码的存储位置。
指定文件的路径。 您可以使用基于当前模块的目录( os.path.dirname(__file__)
是当前模块的目录),或者为您的应用程序配置目标路径。
您可能想在这种情况下研究 上传文件模式。
我通过提供相对路径而不是在文件路径中提供绝对路径来解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.