瓶文件上传和处理(Bottle file upload and process)

2019-07-18 04:10发布

我使用一瓶,而上传大文件。 我们的想法是,当文件上传时,Web应用程序运行(忘记)与上传的文件路径作为参数的系统命令。 但用正确的文件路径作为参数,我不需要保存该文件在系统启动命令,但我需要肯定的是,直到该过程完成后处理文件将可用。

我在这里使用描述的确切代码: http://bottlepy.org/docs/dev/tutorial.html#post-form-data-and-file-uploads

我的问题是:

  • 难道瓶商店上传的文件在内存或磁盘上的特定位置(或者像瓶,两者兼而有之)?
  • 将上传的文件直接提供给其他工具,而不.read(),然后手动保存字节磁盘上的指定文件?
  • 什么是先从文件作为参数的系统命令的最佳方式? 是否有可能只是传递的路径,直接在现有的文件?

Answer 1:

好吧,让我们来打破这种下来。

完整的代码:

HTML:

<form action="/upload" method="post" enctype="multipart/form-data">
  <input type="text" name="name" />
  <input type="file" name="data" />
</form>

Python代码:

from bottle import route, request
@route('/upload', method='POST')
def do_upload():
    name = request.forms.name
    data = request.files.data
    if name and data and data.file:
        raw = data.file.read() # This is dangerous for big files
        filename = data.filename
        return "Hello %s! You uploaded %s (%d bytes)." % (name, filename, len(raw))
    return "You missed a field."

(从文档的查看您所提供)

所以,首先,我们可以看到,我们首先拉离的信息namedata在HTML表单,并将它们分配给变量namedata 。 那是非常直截了当。 然而,接下来我们分配变量rawdata.file.read() 这基本上是把所有上传到变量文件的raw 。 这是说,整个文件是在内存中,这就是为什么他们把“这是很危险的大文件”的旁边,该行的注释。

这是说,如果你想将文件保存到磁盘上,你可以使用像这样做(但要小心 ):

with open(filename,'w') as open_file:
    open_file.write(data.file.read())

至于你的其他问题:

1.“你会是启动与该文件作为参数的系统命令的最佳方式?是否有可能只是路径直接传递到现有的文件吗?”

您应该看到subprocess模块,具体Popen : http://docs.python.org/2/library/subprocess.html#popen-constructor

2.“将上传的文件直接提供给其他工具,而不.read(),然后手动保存字节磁盘上的指定文件?”

是的,你可以通过周围的文件数据,而无需将其保存到磁盘上,然而,予以警告,内存消耗是值得观看。 但是,如果这些“工具”不是用Python,你可以与管道或子流程处理的数据传递给这些“工具”。



Answer 2:

 with open(filename,'w') as open_file:
    open_file.write(data.file.read())

不工作

您可以使用

data = request.files.data
data.save(Path,overwrite=True)


Answer 3:

该文件将通过使用常规处理。 这意味着,你读的处理连接(该文件不应该在那里,根据WSGI规范)



文章来源: Bottle file upload and process