python:tar-ing下载的文件和base64编码tarball

时间:2014-12-19 04:30:07

标签: javascript python tar

我正在尝试从远程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。这里似乎有所不同。

0 个答案:

没有答案