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を使用してそれを開きました。

ブロブストアの問題は、ファイルがサーバーに保存され、他の人がそれらを表示できることです。そのため、私の最善の解決策は、グローバル変数を使用して投稿からデータを保存し、それを 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 に答える