我正在尝试在Flask中测试我的upload()方法。唯一的问题是Flask中的 FileStorage 对象有一个方法save(),python 文件对象没有。
我像这样创建我的文件:
file = open('documents-test/test.pdf')
但我无法测试我的upload()方法,因为该方法使用save()。
如何将此File对象转换为Flask Filestorage对象?
答案 0 :(得分:10)
http://werkzeug.pocoo.org/docs/0.11/datastructures/#werkzeug.datastructures.FileStorage
我需要将烧瓶FileStorage
对象用于测试框架和应用程序本身之外的实用程序,基本上复制了使用表单上传文件的方式。这对我有用。
from werkzeug.datastructures import FileStorage
file = None
with open('document-test/test.pdf', 'rb') as fp:
file = FileStorage(fp)
file.save('document-test/test_new.pdf')
答案 1 :(得分:2)
Flask测试客户端的get
和post
方法会在引擎盖下调用werkzeug.test.EnvironBuilder
- 因此,如果您将字典作为关键字参数data
传入您的文件你应该能够使用它:
def test_upload():
with open("document-test/test.pdf", "rb") as your_file:
self.app.post("/upload", data={"expected_file_key": your_file})
# Your test here
答案 2 :(得分:0)
@neurosnap的回答使我开始学习,但工作并不充分。以下是...
file_loc = open('./tests/sample data/2 Candidates.csv', 'rb')
file = werkzeug.datastructures.FileStorage(file_loc)
file.save(dst='document-test/test_new.pdf')
file_loc.close()
如果您最后没有关闭文件,Python会引发错误。