![](/img/trans.png)
[英]How to handle file upload windows in selenium webdriver + python?
[英]How to handle file upload in python in windows?
我將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表單如下所示:
<form action="/cgi-bin/save.py" method="post" name="Formular" id="Formular" enctype="multipart/form-data">
<input type="file" formenctype="multipart/form-data" name="image1"/>
<input type="file" formenctype="multipart/form-data" name="image2"/>
<input type="file" formenctype="multipart/form-data" name="image3"/>
<input type="file" formenctype="multipart/form-data" name="image4"/>
<input type="file" formenctype="multipart/form-data" name="image5"/>
<input type="submit" value="save" />
</form>
有誰知道為什么在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()
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.