2

我是python和appengine的新手。所以我有这个简单的问题。我想发送服务器数据并让服务器将其作为文件下载发送回来。如果我在页面加载之前下载文件,我可以下载文件. 但在那之后我无法下载。这是我现在拥有的:

class UploadHandler(webapp.RequestHandler):

  def get(self):
    try:    
        xml=parseString(self.request.body)
        result=sanitize(xml)
        if result == None:
          text=xml.toxml('UTF-8')
          name="file.xml"   
          self.response.out.write(text)
          self.response.headers.add_header('Method','get')
          self.response.headers.add_header('Content-Type','text/xml')
          self.response.headers.add_header('name',name)
          self.response.headers.add_header('Content-Disposition','attachment')
          self.response.headers.add_header('filename',name)
          self.response.headers.add_header('Content',text)
   except:
        print self.request.body

这是调用它的javascript:

        var text=getMarkup();
        new Ajax.Request("http://localhost:8080/file",{
        method:'get',
        contentType:"text",
        postBody:text,
        onSuccess:function(){
            console.log(transport.responseText);            
        },          
        onFailure: function(){ 
            console.log('Could not load file...'); 
        },
        onException: function(req,exception) {
            console.log(exception);
            return true;
            }, 
        });

我已经尝试以多种不同的方式更改这两个部分。我可以得到响应,但我无法让它去下载。如果我对主页使用相同的代码,它仍然可以工作。我错过了什么?

终于明白了....我在这里使用此页面上的示例, 只是我将 url 作为响应发回,并在“onsuccess”处理程序中使用 window.open 来打开它。

blobstore的问题是文件保存在服务器上,其他人可以查看它们,所以我最好的解决方案是使用全局变量来保存帖子中的数据,然后将其传递给get并从javascript调用get使用 window.open()。

4

2 回答 2

4

我认为这会有所帮助

import mimetypes
...... 

(content_type, _) = mimetypes.guess_type(name)
self.response.headers['Content-Type'] = content_type
self.response.headers['Content-Disposition'] = 'attachment; filename=' + name
self.response.out.write(text) 

顺便一提。您还可以使用 blobstore 保存文件并下载 blob 文件。

于 2012-05-08T00:17:27.800 回答
0

您是否尝试过 Content-Type: application/force-download?这将表明您正在从服务器发送文件,并且该用户想要下载(而不是查看)它。

self.response.headers.add_header('Content-Type','application/force-download')
于 2012-05-07T23:05:49.097 回答