Skip to main content
 首页 » 编程设计

Python Flask,上传文件之raise BuildError(endpoint, values, method)

2024年08月25日3598°冷暖

我关注了this通过 Flask 将文件上传到网络服务器的教程,返回部分除外。

我的本​​意是上传图片。

这是我的代码:

from flask import Flask, request, jsonify, json, Blueprint, redirect, url_for, send_from_directory 
from werkzeug import secure_filename 
 
app = Flask(__name__) 
 
allowed_extensions = set(['png', 'jpg', 'jpeg', 'gif', 'bmp']) 
folder_upload = '/Users/myusername/Documents/Project_Upload/' 
 
@CustomersAPI.route('/customers/addpicture', methods=['POST']) 
def add_picture(): 
    file = request.files['value'] 
    print file.filename 
    if file and allowed_file(file.filename): 
        filename = secure_filename(file.filename) 
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) 
        #return redirect(url_for('uploaded_file', filename=filename)) 
        return str(url_for('uploaded_file', filename=filename)) 
 
    return "Unable to upload." 
 
def allowed_file(filename): 
    return '.' in filename and filename.rsplit('.', 1)[1] in allowed_extensions 
 
if __name__ == '__main__': 
    app.config['UPLOAD FOLDER'] = folder_upload 
    app.run(host = '0.0.0.0', debug=True) 

因为我还没有 HTML 文件(因此注释掉了 return redirect),我使用 CocoaRestClient 进行测试,这里是我使用的参数:

到目前为止一切正常,直到我点击提交按钮。然后,出现如下错误:

Traceback (most recent call last): 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1836, in __call__ 
    return self.wsgi_app(environ, start_response) 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1820, in wsgi_app 
    response = self.make_response(self.handle_exception(e)) 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1403, in handle_exception 
    reraise(exc_type, exc_value, tb) 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1817, in wsgi_app 
    response = self.full_dispatch_request() 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request 
    rv = self.handle_user_exception(e) 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1381, in handle_user_exception 
    reraise(exc_type, exc_value, tb) 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request 
    rv = self.dispatch_request() 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1461, in dispatch_request 
    return self.view_functions[rule.endpoint](**req.view_args) 
  File "/Users/myusername/Documents/Project_Omnimoda/API/main.py", line 192, in add_picture 
    return redirect(url_for('uploaded_file', filename=filename)) 
  File "/Library/Python/2.7/site-packages/flask/helpers.py", line 312, in url_for 
    return appctx.app.handle_url_build_error(error, endpoint, values) 
  File "/Library/Python/2.7/site-packages/flask/app.py", line 1641, in handle_url_build_error 
    reraise(exc_type, exc_value, tb) 
  File "/Library/Python/2.7/site-packages/flask/helpers.py", line 305, in url_for 
    force_external=external) 
  File "/Library/Python/2.7/site-packages/werkzeug/routing.py", line 1649, in build 
    raise BuildError(endpoint, values, method) 
BuildError: ('uploaded_file', MultiDict([('filename', '3611571-dc_holiday.jpg')]), None) 

有趣的是,图像“3611571-dc_holiday.jpg”实际上确实从我的下载文件夹复制到了 Project_Upload 文件夹,所以它起作用了,只是出现了一个我不确定如何解决的错误。

有什么想法吗?谢谢。

请您参考如下方法:

您还没有定义 uploaded_file 端点。你需要这样做。

@CustomersAPI.route('/customers/SOMETHINGOGESTHERE') 
def uploaded_file(filename): 
    # Do something here with the file, like return it. 
    return send_from_directory( 
        folder_upload, filename, as_attachment=True)