1

以下のコードを使用して、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()
4

1 に答える 1

4

サーバーがWindowsマシンで実行されている場合は、次のコード行が原因です。

fh = open(__UPLOADS__ + fname, 'w')

ファイルをテキストファイルとして開きます。これを使用してバイナリデータを含むファイルを作成すると、値(改行)が出現するたびにペア0x0aに置き換えられます。\n\rその行をに変更します

fh = open(__UPLOADS__ + fname, 'wb')

...それをバイナリファイルとして開き、何が起こるかを確認します。

于 2013-01-30T14:31:45.337 に答える