<p>好吧,让我们把这个分解。</p>
<p>完整代码是:</p>
<h3>HTML:</h3>
<pre><code><form action="/upload" method="post" enctype="multipart/form-data">
<input type="text" name="name" />
<input type="file" name="data" />
</form>
</code></pre>
<h2>PYTHON代码:</h2>
<pre><code>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."
</code></pre>
<p>(从你提供的医生那里)</p>
<p>因此,首先,我们可以看到,我们首先从html表单中的<code>name</code>和<code>data</code>中提取信息,并将它们赋给变量<code>name</code>和<code>data</code>。很直接。但是,接下来我们将变量<code>raw</code>分配给<code>data.file.read()</code>。这基本上是将上传到变量<code>raw</code>中的文件的<em>全部</em>取出来。这就是说,整个文件都在内存中,这就是为什么他们把“这对大文件是危险的”作为注释放在行的旁边。</p>
<p>这就是说,如果你想把文件保存到磁盘上,你可以这样做(但是<em>小心</em>)使用如下方法:</p>
<pre><code>with open(filename,'w') as open_file:
open_file.write(data.file.read())
</code></pre>
<p>至于你的其他问题:</p>
<p>1.“以文件作为参数启动系统命令的最佳方式是什么?是否可以直接将路径传递到现有文件?”</p>
<p>您应该看到<code>subprocess</code>模块,特别是<code>Popen</code>:<a href="http://docs.python.org/2/library/subprocess.html#popen-constructor">http://docs.python.org/2/library/subprocess.html#popen-constructor</a></p>
<p>2.“上传的文件是否可以直接用于其他没有.read()的工具,然后手动将字节保存到磁盘上的指定文件?”</p>
<p>是的,您可以在不将文件数据保存到磁盘的情况下传递文件数据,但是,要注意内存消耗。但是,如果这些“工具”不在python中,您可能正在处理管道或子流程,以便将数据传递给这些“工具”。</p>