我使用下面的代码将zip文件上传到服务器。一切正常,但传入的zip文件由于某种原因已损坏。我知道zip文件是正确创建的,因此它们在创建时不会损坏。因此,服务器代码有问题。
简而言之,像.txt
这样的常规文件上传得很好,但传入的zip文件已损坏。任何人都知道为什么会发生这种情况?
import tornado
import tornado.ioloop
import tornado.web
import os, uuid
__UPLOADS__ = "uploads/"
class Userform(tornado.web.RequestHandler):
def get(self):
self.render("form.html")
class Upload(tornado.web.RequestHandler):
def post(self):
fileinfo = self.request.files['filearg'][0]
fname = fileinfo['filename']
fh = open(__UPLOADS__ + fname, 'w')
fh.write(fileinfo['body'])
self.finish("Success!")
application = tornado.web.Application([
(r"/", Userform),
(r"/upload", Upload),
], debug=True)
if __name__ == "__main__":
application.listen(8888)
tornado.ioloop.IOLoop.instance().start()
答案 0 :(得分:4)
如果服务器在Windows机器上运行,那是因为这行代码:
fh = open(__UPLOADS__ + fname, 'w')
将文件作为文本文件打开。当您使用它来创建包含二进制数据的文件时,值0x0a
(换行符)的每次出现都将替换为\n\r
对。将该行更改为
fh = open(__UPLOADS__ + fname, 'wb')
...打开它作为二进制文件&看看会发生什么。