【问题标题】:Flask - required file is missing烧瓶 - 缺少所需的文件
【发布时间】:2021-06-07 21:14:27
【问题描述】:

我正在玩 Python、Flask,并且我正在尝试创建一个可以接受文件的端点。 基本上我想上传一个随机的 .txt/.json 文件并将其保存在服务器上以供进一步处理。

我的问题

我按照documentation 构建它。但是,那里没有像如何构建发布数据的请求这样的信息。 例如,使用 multipart/form-data 并将其与表单一起上传,或者将其作为二进制文件上传到正文中。无论如何,我在 Postman 中尝试了所有可能的方法,它们都不起作用,看起来文件只是没有到达服务器。能够将其作为二进制文件上传到请求正文中的最简单解决方案是什么?如果代码看起来不错,我应该在邮递员中配置什么才能上传文件??

我的端点

class RawData(Resource):    
    parser = reqparse.RequestParser()
    parser.add_argument('file',
                        type=werkzeug.datastructures.FileStorage,
                        required=True,
                        help="Required file is missing",
                        location='files')
    
    def post(self):
        data = RawData.parser.parse_args()
        file = data['file']
        filename = secure_filename(file.filename)
        file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename))
        return redirect(url_for('uploaded_file',
                                filename=filename))

错误消息 - 邮递员 - HTTP 400

{
    "message": {
        "file": "Required file is missing"
    }
}

【问题讨论】:

  • 我不知道 Resource 是关于什么的。我唯一可以告诉你的是,在烧瓶中,文件在 request.files 中,而不是在数据中。 Werkzeug.datastructure 中的 data 是一个属性,它包含传入的请求数据作为字符串,以防它带有 Werkzeug 无法处理的 mimetype。
  • @Victor 资源来自 flask_RESTful。我会试试的

标签: python rest flask postman werkzeug


【解决方案1】:

原来是 Postman 的问题。仍然没有弄清楚如何发布文件。 然而,CURL 派上了用场,用下面的 cmd 解决了这个问题:

curl -v -X POST -H "Content-Type: multipart/form-data" -F "file=@file.txt" http://localhost:5000/api/v1/rawdata/newfile

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 2015-10-10
    • 2012-05-08
    • 1970-01-01
    • 2022-12-18
    • 2020-02-15
    • 2015-07-11
    相关资源
    最近更新 更多