agn*_*aft 8 python file-upload bottle
我正在使用Bottle上传相当大的文件.这个想法是,当文件上传时,Web应用程序运行(并忘记)一个系统命令,其中上传的文件路径作为参数.除了以正确的文件路径作为参数启动系统命令之外,我不需要保存文件,但我需要确保该文件在该过程完成处理之前可用.
我使用这里描述的确切代码:http: //bottlepy.org/docs/dev/tutorial.html#post-form-data-and-file-uploads
我的问题是:
IT *_*nja 17
好吧,让我们打破这个.
完整的代码是:
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="text" name="name" />
<input type="file" name="data" />
</form>
Run Code Online (Sandbox Code Playgroud)
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."
Run Code Online (Sandbox Code Playgroud)
(来自你提供的文件)
所以,首先,我们可以看到,我们首先拉开距离的信息name和data在HTML表单,并将它们分配给变量name和data.这很直接.但是,接下来我们将变量赋值raw给data.file.read().这基本上是将所有文件上传到变量中raw.话虽这么说,整个文件都在内存中,这就是为什么他们把"这对于大文件很危险"作为该行旁边的注释.
这就是说,如果你想将文件保存到磁盘,你可以这样做(但要小心)使用类似的东西:
with open(filename,'w') as open_file:
open_file.write(data.file.read())
Run Code Online (Sandbox Code Playgroud)
至于你的其他问题:
1."以文件作为参数启动系统命令的最佳方法是什么?是否可以直接将路径传递给现有文件?"
您应该看到该subprocess模块,特别是Popen:http://docs.python.org/2/library/subprocess.html#popen-constructor
2."上传的文件是否可以直接用于没有.read()的其他工具,然后手动将字节保存到磁盘上的指定文件?"
是的,您可以传递文件数据而不将其保存到磁盘,但是,请注意,内存消耗是值得关注的.但是,如果这些"工具"不在python中,您可能正在处理管道或子进程以将数据传递给这些"工具".
小智 5
with open(filename,'w') as open_file:
open_file.write(data.file.read())
Run Code Online (Sandbox Code Playgroud)
不工作
您可以使用
data = request.files.data
data.save(Path,overwrite=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11635 次 |
| 最近记录: |