Python文件对象到Flask的FileStorage

时间:2013-08-15 09:32:57

标签: python testing flask

我正在尝试在Flask中测试我的upload()方法。唯一的问题是Flask中的 FileStorage 对象有一个方法save(),python 文件对象没有。

我像这样创建我的文件:

file = open('documents-test/test.pdf')

但我无法测试我的upload()方法,因为该方法使用save()。

如何将此File对象转换为Flask Filestorage对象?

3 个答案:

答案 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测试客户端的getpost方法会在引擎盖下调用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会引发错误。