python - 如何使用 GAE Python 下载多个文件

标签 python google-app-engine http urllib webapp2

我想下载几个包含 GAE Python 代码的文件。 我当前的代码如下所示

import webapp2, urllib
url1 = 'http://dummy/sample1.jpg'
url2 = 'http://dummy/sample2.jpg'

class DownloadHandler(webapp2.RequestHandler):
    def get(self):
        #image1
        self.response.headers['Content-Type'] = 'application/octet-stream'
        self.response.headers['Content-Disposition'] = 'attachment; filename="' + 'sample1.jpg' + '"'
        f = urllib.urlopen(url1)
        data = f.read()
        self.response.out.write(data)

        #image2
        self.response.headers['Content-Type'] = 'application/octet-stream'
        self.response.headers['Content-Disposition'] = 'attachment; filename="' + 'sample2.jpg' + '"'
        f = urllib.urlopen(url2)
        data = f.read()
        self.response.out.write(data)

app = webapp2.WSGIApplication([('/.*', DownloadHandler)], 
                              debug=True)

我预计这段代码会发生两次下载对话,但实际上发生了一次,而且只下载了 sample2.jpg。 您如何处理多次下载对话?

我实际上也想实现上面添加的一些其他功能。 在浏览器上显示进度消息,例如
sample1.jpg 已下载
sample2.jpg 已下载
sample3.jpg 已下载 ...

并在下载文件后重定向到另一个页面。 当我写了这样的代码时

self.redirect('/otherpage')

之后

self.response.out.write(data)

只发生了重定向,没有发生下载过程。

你能给我一些解决问题的想法吗? 我用的是python2.7

最佳答案

两件事。

  1. 如果Content-Typeapplication/octet-stream,您不能在一个响应中写入两个文件。要在响应中填充多个文件,您必须使用 multipart/form-datamultipart/mixed 对您的响应进行编码,并希望客户端能够理解并解析并显示两个下载对话框

  2. 一旦您已经调用了 self.response.out.write(…),您就不应再设置任何 header 。

对我来说,最简单的选择似乎是提供一个包含如下内容的 HTML 文件:

<script>
  window.open('/path/to/file/1.jpg');
  window.open('/path/to/file/1.jpg');
</script>

...然后使用不同的处理程序处理这些路径。

另一种选择是压缩这两个文件并将 zip 文件提供给客户端,尽管在您的情况下它可能更可取,也可能不是。

关于python - 如何使用 GAE Python 下载多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20394025/

相关文章:

java - 持久性 JDO - 如何使用 JDO 查询集合的属性?

java - 数据存储区查询是否依赖于 Web session 或某些执行线程?

google-app-engine - 如何将裸域/顶点域与 App Engine 结合使用?

C++ 如何从 Http GET 数据包中获取主机名

PHP AWS S3 SDK 重试网络连接错误

python - 在 Django 中使用 Python ZipStream 获取损坏的 zip

python - 无法在 Python 中分配给文字

html - 为什么 html 转义 >159?

python - 为什么带有蒙版数组的 pcolor 在投影到 cartopy 坐标时会填充不需要的四边形?

python - 如何将字典中的键更改为大写并在生成的字典中添加相同键的值?