[英]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
兩件事情。
您不能在Content-Type
為application/octet-stream
一個響應中寫入兩個文件。 要在響應中填充多個文件,您必須使用multipart/form-data
或multipart/mixed
編碼響應,並希望客戶端能夠理解並分析並顯示兩次下載對話
一旦調用了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.