【问题标题】:Extract files from zip folder and store these files in blobstore从 zip 文件夹中提取文件并将这些文件存储在 blobstore 中
【发布时间】:2012-03-21 16:48:17
【问题描述】:

我想从文件输入中上传 zip 文件夹,我想提取这个上传的 zip 文件夹的内容,并将这个 zip 的内容(文件)存储在 blobstore 中,以便在将这些文件放入后下载它们一个文件夹,但问题是我不能直接处理 zip 文件夹(读取它),我试过这样:

form = cgi.FieldStorage() 
file_upload = form['file']
zip1=file_upload.filename
zipstream=StringIO.StringIO(zip1.read())

但问题仍然是我无法像以前那样读取 zip,我也尝试像这样直接读取 zip 文件夹:

z1=zipfile.ZipFile(zip1,"r")

但是这种方式有错误。请任何人帮助我。提前谢谢。

【问题讨论】:

  • 一般来说,如果您发布错误会有所帮助。

标签: python google-app-engine unzip blobstore


【解决方案1】:

根据您的评论,听起来您需要仔细查看cgi module documentation,其中包括以下内容:

如果一个字段表示一个上传的文件,通过value 属性或getvalue() 方法访问该值会将内存中的整个文件作为字符串读取。这可能不是你想要的。您可以通过测试filename 属性或file 属性来测试上传的文件。然后您可以从file 属性中轻松读取数据...

这表明您需要将代码修改为如下所示:

form = cgi.FieldStorage() 
file_upload = form['file']
z1 = zipfile.ZipFile(file_upload.file, 'r')

文档中有其他示例。

【讨论】:

  • :我写时的问题:zipstream=StringIO.StringIO(zip1.read()) 是:'str' 对象没有属性'read'(所以我无法读取上传的 zip)所以我尝试在不使用 zipstream 的情况下使用 :z1=zipfile.ZipFile(zip1,"r") 但错误是我无法直接读取上传的 zip。
【解决方案2】:

您不必从 zip 中提取文件以供下载 - 请参阅 this post 以获取直接从 zip 提供服务的示例。如果您想提取文件并将它们单独存储在 blobstore 中,您可以修改该代码。

【讨论】:

  • @尼克约翰逊:对不起,我不完全理解这篇文章,你的意思是不需要从zip中提取文件,但这怎么可能??我需要这样做并将这些文件上传到 blobstore,请问我需要帮助吗??
  • :是的,很抱歉我没看懂这篇文章!!
  • @Eng_Engineer 告诉我您对此的不理解之处,我会尽力澄清。它几乎完全按照您的要求进行构建。
  • @Nick Johnson:我看了帖子后看到了demo,这是用于上传zip,demo中有站点fileld,我不明白这个字段到底是什么??谢谢
  • @Eng_Engineer 该字段是您要提供 zip 文件的子域的名称。它是特定于演示的 - 它不必那样工作。
猜你喜欢
  • 2012-03-11
  • 2011-05-02
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多