我已經看到通過multipartform-data和pycurl上傳文件的信息。
這兩種方法似乎都需要磁盤上的文件。
這些配方是否可以修改爲從存儲器而不是從磁盤提供二進制數據?
我想我可以用xmlrpc server代替。
我想避開編碼和解碼二進制數據並將其原始發送......
pycurl和mutlipartform-data與原始數據一起工作嗎?使用python http上傳內存中的二進制數據或文件
回答
發現,與CherryPy的文件作品上傳例如一個解決方案:urllib2-binary-upload.py
找到一個cas與文件句柄一起工作的東西。然後只需傳遞一個StringIO對象而不是一個真實的文件描述符。
這(小)庫將採取文件描述符,並會做的HTTP POST操作:https://github.com/seisen/urllib2_file/
你可以傳遞一個StringIO
對象(包含您在內存中的數據)作爲文件描述符。
urllib2_file構建並傳遞它自己的測試。但是它無法通過cherrypy文件上傳示例http://docs.cherrypy.org/dev/progguide/files/uploading.html不能確定問題出在cherrypy示例或urllib2_file上。我試過python test-upload.py -u http://www.myurl.com -f mytest.py -n myFile – Naveen 2011-01-29 00:49:56
我今天遇到類似的問題,之後嘗試都和pycurl和多/表單數據,我決定讀蟒蛇httplib的/ urllib2的源代碼找出來,我沒有得到一個相當不錯的解決方案:在做後
- 設置Content-Length頭(文件)後做時傳遞一個打開的文件
下面是代碼:
import urllib2, os
image_path = "png\\01.png"
url = 'http://xx.oo.com/webserviceapi/postfile/'
length = os.path.getsize(image_path)
png_data = open(image_path, "rb")
request = urllib2.Request(url, data=png_data)
request.add_header('Cache-Control', 'no-cache')
request.add_header('Content-Length', '%d' % length)
request.add_header('Content-Type', 'image/png')
res = urllib2.urlopen(request).read().strip()
return res
見我的博客文章:http://www.2maomao.com/blog/python-http-post-a-binary-file-using-urllib2/
下面的Python代碼適用於2.6.x.可靠輸入數據是str類型。 請注意,接收數據的服務器必須循環讀取所有數據,因爲大數據量將被分塊。還附加了Java代碼片段來讀取分塊數據。
def post(self, url, data):
self.curl = pycurl.Curl()
self.response_headers = StringIO.StringIO()
self.response_body = io.BytesIO()
self.curl.setopt(pycurl.WRITEFUNCTION, self.response_body.write)
self.curl.setopt(pycurl.HEADERFUNCTION, self.response_headers.write)
self.curl.setopt(pycurl.FOLLOWLOCATION, 1)
self.curl.setopt(pycurl.MAXREDIRS, 5)
self.curl.setopt(pycurl.TIMEOUT, 60)
self.curl.setopt(pycurl.ENCODING,"deflate, gzip")
self.curl.setopt(pycurl.URL, url)
self.curl.setopt(pycurl.VERBOSE, 1)
self.curl.setopt(pycurl.POST,1)
self.curl.setopt(pycurl.POSTFIELDS,data)
self.curl.setopt(pycurl.HTTPHEADER, [ "Content-Type: octate-stream" ])
self.curl.setopt(pycurl.POSTFIELDSIZE, len(data))
self.curl.perform()
return url, self.curl.getinfo(pycurl.RESPONSE_CODE),self.response_headers.getvalue(), self.response_body.getvalue()
的servlet引擎的Java代碼:
int postSize = Integer.parseInt(req.getHeader("Content-Length"));
results = new byte[postSize];
int read = 0;
while(read < postSize) {
int n = req.getInputStream().read(results);
if (n < 0) break;
read += n;
}
- 1. python ftplib上傳二進制文件
- 2. 如何在Python中使用ftplib上傳二進制文件?
- 3. 將文件內容(二進制數據)存儲在plone.app.registry中
- 4. 需要使用RADUPLOAD存儲上傳文件的二進制格式數據
- 5. 二進制數據存儲方案(保存用戶上傳的文件)
- 6. jQuery的文件上傳,使二進制文件上傳
- 7. 使用python從二進制文件中讀取數字數據
- 8. python - 使用結構解析二進制文件中的數據
- 9. python:使用未編碼的二進制數據的HTTP PUT
- 10. PHP - Doctrine存儲文件(數據庫中的二進制文件)
- 11. 通過http使用Python發佈二進制數據 - > PHP
- 12. 通過HTTP請求將二進制數據上傳到AppEngine Blobstore
- 13. 寫的字符串二進制數據的二進制文件
- 14. 從python中的文本文件中去掉二進制數據
- 15. Python讀取二進制文件中的二進制數據到字符串?
- 16. 使用R或Python的二進制數據的熱圖
- 17. 機械化上傳二進制數據
- 18. 保存二進制數據到MySQLdb - Python
- 19. 如何使用Python將數據寫入二進制文件
- 20. 肥皂:上傳二進制數據
- 21. 更改上傳二進制文件場
- 22. 的Python:二進制文件
- 23. Rails + CouchDb二進制文件上傳到數據庫
- 24. 捕捉二進制文件上傳
- 25. 在C中使用內存映射讀取二進制文件
- 26. 使用二進制數據使用AJAX從jsPDF上傳PDF
- 27. 上傳二進制文件後更改元數據
- 28. 上傳二進制文件問題
- 29. Javascript未上傳二進制數據
- 30. 使用python上傳文件http
不幸的是這兩種食譜需要一個文件名不是文件描述符。 – Naveen 2011-01-28 21:01:13
上次我查找的東西有一個urllib2的補丁,它允許在POST數據列表中傳遞一個文件描述符 – ThiefMaster 2011-01-28 21:04:06