簡體   English   中英

如何使用GAE Python下載多個文件

[英]How to download several files with GAE Python

我想用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(…) ,就不應再設置任何標頭。

在我看來,最簡單的選擇是提供包含以下內容的HTML文件:

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

…然后使用不同的處理程序處理這些路徑。

另一個選擇是將這兩個文件壓縮並把zipfile提供給客戶端,盡管在您的情況下它可能是可取的,也可能不是最好的。

我達到了想要做的目標。

作為用戶交互,生成html源包括以下內容

<script type="text/javascript">
    window.open("/download?url=http://dummy/sample1.jpg")
    window.open("/download?url=http://dummy/sample2.jpg")
</script>

然后使用此代碼處理創建的新窗口。

class DownloadHandler(webapp2.RequestHandler):
    def get(self):
        url = self.request.get('url')
        filename = str(os.path.basename(url))
        self.response.headers['Content-Type'] ='application/octet-stream'
        self.response.headers['Content-Disposition'] = 'attachment; filename="%s"' % (filename)

        data = urllib.urlopen(url).read()
        self.response.out.write(data)

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

謝謝阿提拉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM