0

GAEでFlaskを実行しています。ファイルの提供に問題があります。すべてが正しいように見えますが、ブラウザーにポップアップして保存するように促すものは何も表示されず、ログ コンソールにエラーはありません。

@app.route("/submit", methods=["GET"])
def submitChecklist():

... generate json

headers = {'content-type': 'application/json', 'charset':'UTF-8'}
r = requests.post(url, data=json.dumps(jsonstring), headers=headers, stream=True)

print 'payload: ' + r.text
response = make_response(r.text)
response.headers["Content-Disposition"] = "attachment; filename=exportChecklists.xml"

return response

アップデート

問題は JavaScript 側にある可能性があると考えています。これが現在私が持っているものであり、ダウンロードを促しません。

$.get('submit',
        dat, 
        function(data) {
            if (data.success==1)
                console.log("done")
            else
                alert("There is an exception on server side while submitting the response!")
            },'text');

ここに解決策があるように感じますが、よくわかりません。

更新 #2

これを行う方法がまだわからないので、1つのファイルのみを提供します。以下の説明は一般的には適切ですが、jQuery を使用して 1 つのファイルのみを提供する方法がわかりません。誰かがこれを行う方法の例を教えてください。

助けてくれてありがとう。

4

1 に答える 1

0

問題を解決するために私がしたことは次のとおりです。これは適切な方法ではないかもしれませんが、次の方法があります。

Javascript 側:

$.get('submit',
        dat,
        function(data, status, request) {
            if (status = 'success'){
                console.log(status);
               $("body").append("<iframe src='" + request.getResponseHeader('redirect')+ "' style='display: none;' ></iframe>");
            }
            else 
                alert("There is an exception on server side while submitting the response!");

        }, 
        'xml'); 

フロントエンドの Python:

  headers = {'content-type': 'application/json', 'charset':'UTF-8'}
  r = requests.post(url, data=json.dumps(jsonstring), headers=headers)
  response = make_response(r.text)
  response.headers["Content-Type"] = 'application/xml'
  response.headers.add("redirect", request.url)
  response.headers["Content-Disposition"] = 'attachment; filename="exportChecklists.xml"'

  return response

基本的に、最初にリクエスト URL であるリダイレクト URL を追加したので、ファイルの準備ができたら、最新のブラウザーがリダイレクトしてダウンロードを促す非表示の iFrame を作成しました。

より良い解決策があれば修正してください。

于 2013-10-27T20:52:12.983 に答える