我正在尝试从远程ftp服务器下载一些文本文件,下载后我会将它们放在tarball中,然后对文件进行base64编码并通过打开的Web套接字将其发送到客户端。
def download():
if index_want == 1:
tar_file = StringIO.StringIO()
tar = open(mode="w:gz", fileobj=tar_file)
for i ,l in enumerate(to_download):
last_index = l.rfind('|')
download_path = l[last_index+1:].strip()
mda_url = '%s/%s'%(root_url, download_path)
logger.debug('Downloading file %s/%s at %s', i, len(to_download), mda_url)
mda_req = urllib2.Request(mda_url)
mda_response = urllib2.urlopen(mda_req)
f = StringIO.StringIO(mda_response.read())
replace_path = mda_url.replace('/', '_')
ti = TarInfo("%s.txt" %replace_path)
ti.size = f.len
tar.addfile(ti, f)
tar.close()
logger.info("Completed downloading all the requested files..")
return tar_file
download().getvalue().encode('base64', 'strict')
客户端代码
var content = messageObj['data'];
var decodedContent = atob(content);
var blob = new Blob([decodedContent], {type: 'application/octet-stream'});
saveAs(blob, "mda.tar");
在OSX上,收到文件并解压缩后,生成的文件为mda.tar.cpgz
,而不是我下载的单个文件。我的代码中有什么问题吗?
更新:
我逐步完成了javascript代码,特别是在本节中
var blob = new Blob([decodedContent], {type: 'application/octet-stream'});
window.open((window.URL || window.webkitURL).createObjectURL(blob));
decodedContent
的长度为11274,这似乎是正确的。运行以上2行后,保存的文件大17Kb。这里似乎有所不同。