gpt4 book ai didi

python - linux+apache2.2+wsgi+python 上传文件时出现额外内容

转载 作者:太空宇宙 更新时间:2023-11-04 04:49:32 25 4
gpt4 key购买 nike

我搭建了linux+apache2.2.+wsgi+python环境来测试文件上传。总共有2个页面,第一个是让用户选择要上传的文件;第二个是让用户选择要上传的文件。另一个是处理文件上传。

预期结果:
上传的文件内容正确。

实际结果:
上传一个文件,但内容是原始文件内容加上http头和开始/结束行的一部分。像:

-----------------------------40976349392994148594600211
Content-Disposition: form-data; name="filename"; filename="configure.scan"
Content-Type: application/octet-stream
[original file content]
-----------------------------40976349392994148594600211

有人可以回答我吗?我将深深感谢您的帮助。

首页代码:

output= '<html><head>' +\  
'<br>' + \
'</head><body>' + \
'<form name="form1" action=“/dynamic/postuploadfile.py” enctype="multipart/form-data" method=“post”>' +\
'File: <input type="file" name="test" size=50><br />' +\
'<input type=“submit” value="upload"/>' +\
'</form></body></html>'

def application(environ, start_response):
status = '200 OK'
response_headers = [('Content-type', 'text/html'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]

第二页代码:

import os  

def upload(environ):

# A nested FieldStorage instance holds the file
#fileitem = req.form['file']
data = environ['wsgi.input'].read(int(environ.get('CONTENT_LENGTH','0')))

message = ''
open('uploaded', 'wb').write(data)
message = 'The file was uploaded successfully'

return ( '<html><body>' + message + '</body><html>' )

def application(environ, start_response):
status = '200 OK'
output = upload( environ )
response_headers = [('Content-type', 'text/html'),
('Content-Length', str(len(output)))]
start_response(status, response_headers)
return [output]

最佳答案

是的。这是正确的行为。通过使用mime封装,可以上传多个文件。否则你会怎么做?

看一下 python 的 cgi.FieldStorage 类,它具有处理用于 CGI 请求的 multipart mime 类型的各种功能。

不要天真地处理这个问题。在某些情况下,需要对文件内容进行编码或解码。最明显的情况是,当上传的文本文件本身包含分隔符字符串时(----------------------------40976349392994148594600211
在您的示例中),它需要以某种方式进行编码。

您还可以尝试 WSGI python 工具包 werkzeug,请参阅 http://werkzeug.pocoo.org/docs/http/#module-werkzeug.formparser

关于python - linux+apache2.2+wsgi+python 上传文件时出现额外内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9052146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com