Google App Engine и Flask: обслуживание файлов

0

Я запускаю 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. Не могли бы вы предоставить пример того, как это сделать.

Спасибо за помощь.

  • 0
    Что отображается в заголовках в ответе в вашем браузере?
  • 0
    'HTTP / 1.1 200 OK тип контента: text / html; charset = utf-8 content-disposition: вложение; filename = exportChecklists.xml Cache-Control: no-cache Срок действия истекает: Fri, 01 Jan 1990 00:00:00 GMT Длина контента: 481 Сервер: Development / 2.0 Дата: Sun, 27 Oct 2013 05:58:03 GMT '
Показать ещё 5 комментариев
Теги:
flask
google-app-engine
response

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, который пересматривает современные браузеры и запрашивает для загрузки.

Пожалуйста, исправьте меня, если есть лучшее решение.

  • 1
    Ну, вы в основном скачиваете файл дважды. Один раз при использовании ajax для получения заголовка, второй раз, когда браузер действительно сохраняет файл. Я предлагаю использовать два отдельных представления: одно возвращает ссылку для перенаправления, а другое возвращает реальный файл. См. Stackoverflow.com/questions/4545311/… для получения дополнительной информации о загрузках ajax.
  • 0
    Благодарю. Что вы подразумеваете под двумя взглядами? (Извините, я не очень хорошо разбираюсь в веб-разработке)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню