将excel文件加载到用户上传

时间:2016-06-07 11:06:37

标签: python excel apache flask

我有一个烧瓶应用,用户将文件上传到上传文件夹。然后我想获取这些文件并将它们读入pandas数据帧以进行进一步处理。使用我的localhost上的app.run()可以正常运行。我试图让它与mod_wsgi和apache一起工作。

    @app.route('/uploader', methods=['POST'])
    def upload_file():
        if request.method == 'POST':
            filenames=[]
            uploaded_files = request.files.getlist("file[]")
            file.save(os.path.join(app.root_path,app.config['UPLOAD_FOLDER'], filename))
            filenames.append(filename)
        plotfiles=parse_all(filenames)

    def parse_all(filenames):
        folder_path=os.path.join(app.root_path, app.config['UPLOAD_FOLDER'])
        for f in filenames:
            f=send_from_directory(folder_path,filename))
            excel_file=pandas.ExcelFile(f)
            #do more stuff

我收到错误ValueError: Must explicitly set engine if not passing in buffer or path for io.

文件正确上传到上传文件夹,但显然未正确提取到f变量中。 f的类型为<class 'flask.wrappers.Response'>f.__dict__返回

{'_on_close': [], 'response': [], 'headers': Headers([('X-Sendfile', u'/var/www/html/cluster_app/data/filename.xlsx'), ('Content-Length', u'82668'), ('Content-Type', u'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'), ('Cache-Control', u'public, max-age=43200'), ('Expires', u'Tue, 07 Jun 2016 22:59:11 GMT'), ('ETag', u'"1465297151.54-82668-755509703"')]), '_status_code': 200, '_status': '200 OK', 'direct_passthrough': True}

在我的机器上的本地主机上运行时,响应中有一个.file属性,现在响应为空。打印folder_path会提供/var/www/html/cluster_app/data这是uploads文件夹。

我在flask / wsgi / apache上非常绿。非常感谢有关如何在我的代码中访问文件系统的一些建议。

2 个答案:

答案 0 :(得分:0)

您好我建议您查看有关上传文件here的烧瓶文档,然后重新检查您的代码。

答案 1 :(得分:0)

而不是

f=send_from_directory(folder_path,filename))

我用

f = open(os.path.join(app.root_path, app.config['UPLOAD_FOLDER'], filename))

打开文件。我只是假设send_from_directory会像我在本地主机上使用flask app.run()那样工作。我仍然想知道为什么send_from_directory不起作用。