我是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;
},
});
我尝试过多种不同的方式更改两个部分。我可以得到回复,但我无法进行下载。如果我使用相同的代码进行主页,它可以正常工作我错过了什么?
终于搞定了.... 我使用此页面上的示例here 只有我将网址作为响应发回,并在" onsuccess"中使用了window.open。处理程序打开它。
blobstore的问题是文件保存在服务器上而其他人可以查看它们,所以我最好的解决方案就是使用全局变量来保存帖子中的数据,然后将其传递给get和call从window.open()获取javascript。
答案 0 :(得分: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文件。
答案 1 :(得分:0)
您是否尝试过Content-Type:application / force-download? 它将指示您正在从服务器发送文件,并且该用户想要下载(而不是查看)它。
self.response.headers.add_header('Content-Type','application/force-download')