python上传文件到windows_如何处理在Windows中的Python文件上传?

我将HTML表单发布到在简单的python服务器上运行的python脚本。一个帖子请求中最多可以发布10个文件。图像数据是这样访问的:

import cgi

# simple post data access

form = cgi.FieldStorage()

imgfieldname = "image1"

imagedata = form[imgfieldname].file.read()

# size varies for the same source image file for different uploads

# on Win7 for no obvious reason

size = len(imagedata)

# save image data to file, results in an truncated image on Win7

# as the image is already truncated when read from form above

fh = open("image1", "wb")

fh.write(imagedata)

fh.close()上面的代码在Mac OS 10.8的Python 3.2.3上正常工作。我在Win7下得到了Python 3.2.3下的随机错误。文件上传不是随机完成的。我有时会得到完整的文件上传,有时我会得到一个截断的文件。

发布数据的HTML表单如下所示:

有谁知道为什么在Win7下发生这种情况?

编辑

执行脚本的python服务器看起来像

#!/usr/bin/env python

#-*- coding: ISO-8859-1 -*-

import http.server

import socketserver

import subprocess

import os

import time

import threading

import cgi

import cgitb; cgitb.enable()

try: # Windows needs stdio set for binary mode.

import msvcrt

msvcrt.setmode (0, os.O_BINARY) # stdin = 0

msvcrt.setmode (1, os.O_BINARY) # stdout = 1

except ImportError:

pass

PORT = 8000

class MyHandler(http.server.CGIHTTPRequestHandler):

# Disable logging DNS lookups

def address_string(self):

return str(self.client_address[0])

class ThreadingHTTPServer(socketserver.ThreadingMixIn, http.server.HTTPServer):

pass

if __name__=='__main__':

#Handler = http.server.CGIHTTPRequestHandler

Handler = MyHandler

#httpd = http.server.HTTPServer(("", PORT), Handler)

httpd = ThreadingHTTPServer(('localhost', 8000), Handler)

print("serving at port", PORT)

httpd.serve_forever()