Я запускаю Flask на GAE. У меня есть проблема, обслуживающая мой файл. Все кажется правильным, но в моем браузере ничего не появляется, чтобы побудить его сохранить его, и в консоли журнала ошибок нет:
@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. Не могли бы вы предоставить пример того, как это сделать.
Спасибо за помощь.
Вот что я сделал для решения проблемы, это может быть не совсем правильно, но вот одно:
Со стороны 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, который пересматривает современные браузеры и запрашивает для загрузки.
Пожалуйста, исправьте меня, если есть лучшее решение.