擅长:python、mysql、java
<p>最后我使用了一个更简单的<code>FieldStorage</code>子类来解决这个问题,所以我把它作为答案发布在这里。您不必重写<code>__init__</code>并将文件名添加到<code>Content-Disposition</code>头中,而只需将<code>.filename</code>属性重写为返回文件名的属性(如果没有为该输入提供文件名):</p>
<pre><code>class MyFieldStorage(cgi.FieldStorage):
@property
def filename(self):
if self._original_filename is not None:
return self._original_filename
elif self.name == 'payload':
return 'file_name'
else:
return None
@filename.setter
def filename(self, value):
self._original_filename = value
</code></pre>
<p>另外,正如@bobince的回答所指出的,您可以使用<code>surrogateescape</code>错误处理程序,然后将其编码回字节。这有点迂回,但也可能是最简单的解决方法:</p>
^{pr2}$