【问题标题】:Flask Uploads - TypeError: save() got an unexpected keyword argument 'name'Flask Uploads - TypeError: save() got an unexpected keyword argument 'name'
【发布时间】:2015-02-21 02:16:00
【问题描述】:

我正在尝试使用 Flask 上传文件并在完成时编写一个重命名的文件。根据Flask-Uploads docs,save() 有一个为此目的的名称参数。我收到 TypeError: save() got an unexpected keyword argument 'name' 使用下面的代码。如果我省略了保存函数的名称部分,file.save(os.path.join('/path/to/uploads', filename)),一切都会按预期工作。

我的意图是将文件字段所在的 wtform 中的 cust 值添加为写入的文件名 custvalue_filename.extension,正如我尝试使用 name=renfn 所证明的那样。

views.py

def fc_upload():
    form = InvFcUploadForm(next=request.args.get('next'))
    if request.method == 'POST' and form.validate_on_submit():
        file = request.files['file']
        if file:
            filename = secure_filename(file.filename)
            renfn = str(form.cust.data) + '_' + filename + '.'
            file.save(os.path.join('/path/to/uploads',
                filename), name=renfn)
            flash('File uploaded.', 'success')
    return render_template('inventory/fc_upload.html', form=form)

我只是在学习 python 和 Flask,所以我完全怀疑我错过了一些明显的东西。提前谢谢你。

【问题讨论】:

    标签: python-2.7 flask flask-wtforms flask-uploads


    【解决方案1】:

    我遇到了同样的问题,我通过使用类似的方法解决了它

    file = request.files['file']
    file.filename = "abc.txt"  #some custom file name that you want
    file.save("Uploads/"+file.filename)
    

    【讨论】:

      【解决方案2】:

      根据 Flask 的 API 文档,request 对象的 files 属性的内容是一个 MultiDict 对象,其值包含一个 FileStorage 对象。从下面链接的 Werkzeug 文档中可以看出,这些对象的 save() 方法不接受 name 关键字参数。

      http://werkzeug.pocoo.org/docs/0.9/datastructures/#werkzeug.datastructures.FileStorage

      我自己没有测试过,但是在这种情况下,你可能想尝试修改filename 对象的filename 属性。或者,以您希望的方式手动打开一个文件对象,并将其作为第一个参数传递给 save() 方法(如果这样做,请记住在文件对象上调用 close())。

      【讨论】:

        猜你喜欢
        • 2021-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-19
        • 1970-01-01
        • 2022-01-12
        • 2015-09-23
        • 1970-01-01
        相关资源
        最近更新 更多