2012-06-09 52 views
0

我正在上傳MP3文件到一個虛擬主機提供商(我沒有控制權),並在計算器上一個相關的問題後,我注意到,主機不支持gzip編碼上傳。gzip壓縮FILESTREAM上傳的各種形式的

在Python中,如何將我能夠編碼我流(這是我從開放(文件名)獲得),併發送至服務器?

def upSong(fileName): 
    datagen, headers = multipart_encode({"mumuregularfile_0": open(fileName, "rb")}) 

    uploadID = math.floor(random.random()*1000000) 
    request = urllib2.Request("http://upload0.mumuplayer.com:443/?browserID=" + browserID + "&browserUploadID=" + str(uploadID), datagen, headers) 

    urllib2.urlopen(request).read() 

這是做上傳,是相當新的Python我不知道我怎麼會解決這樣的問題的代碼,但谷歌已經提供了沒有答案。

回答

2

看一看內建的gzip庫:文檔是在這裏:http://docs.python.org/library/gzip.html

可避免使用StringIO的字符串文件對象

也許是這樣的方法來創建任何額外的文件:

import gzip, StringIO 

def upSong(fileName): 
    with open(filename, 'rb') as f 
     stringf = StringIO.StringIO() 
     zipper = gzip.GzipFile(mode = "wb", fileobj=stringf) 
     zipper.write(f.read()) 
     zipper.close() 
     datagen, headers = multipart_encode({"mumuregularfile_0": stringf)}) 

     uploadID = math.floor(random.random()*1000000) 
     request = urllib2.Request("http://upload0.mumuplayer.com:443/?browserID=" + browserID + "&browserUploadID=" + str(uploadID), datagen, headers) 

     urllib2.urlopen(request).read() 

沒測試過這一點,所以有可能是錯誤......

+0

可能不得不尋求StringIO對象到開始寫之後:' ''zipper.close()'行後面的'stringf.seek(0)'。 – user747508

+0

Gzip已被抱怨寫入只讀GzipObject,是什麼意思。 –

+0

找到了它,我添加了需要的更改到您的代碼 –