1

我正在尝试使用 Flask 上传文件并在完成时编写一个重命名的文件。根据Flask-Uploads 文档, 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 所证明的那样。

视图.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,所以我完全怀疑我错过了一些明显的东西。先感谢您。

4

2 回答 2

0

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

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

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

于 2014-12-22T23:25:27.780 回答
0

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

file = request.files['file']
file.filename = "abc.txt"  #some custom file name that you want
file.save("Uploads/"+file.filename)
于 2016-10-12T07:32:34.297 回答