我正在尝试使用Flask上传文件,并在完成时写入重命名的文件。根据{{3}},save()具有用于此目的的名称参数。我收到TypeError:save()在使用下面的代码时得到了一个意外的关键字参数'name'。如果省略save函数的名称部分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,所以我完全怀疑我错过了一些明显的东西。提前谢谢。
答案 0 :(得分:0)
Per Flask的API文档中,files
对象的request
属性的内容是MultiDict
对象,其值包含FileStorage
个对象。从下面链接的Werkzeug文档中可以看出,这些对象的save()
方法不接受name
关键字参数。
http://werkzeug.pocoo.org/docs/0.9/datastructures/#werkzeug.datastructures.FileStorage
我自己没有测试过,但是在这种情况下要做你想做的事情,你可能想尝试修改filename
对象的FileStorage
属性。或者,以您希望的方式手动打开文件对象,并将其作为第一个参数传递给save()
方法(如果您这样做,请记住在文件对象上调用close()
左右)。
答案 1 :(得分:0)
我遇到了同样的问题,我通过使用类似
的方式解决了这个问题file = request.files['file']
file.filename = "abc.txt" #some custom file name that you want
file.save("Uploads/"+file.filename)