Серверный python, возвращающий zip-файл для загрузки - PullRequest
2 голосов
/ 03 мая 2019

Используя мой клиент, я передаю параметр через скрипт python на сервере, он запускает процесс и создает zip-файл. В моем клиентском JavaScript мой ajax-вызов просто говорит мне, что он смог передать данные в мой скрипт на python.

Я пробовал sys.stdout.write(b"zipfilename"), но ничего не происходит. Если я не могу передать файл обратно, есть ли способ передать что-то обратно, чтобы мой JavaScript знал, что это сделано? Я не использую NODE или Angular. Мой скрипт на python запускается и создает zip-файл на сервере, но страница JavaScript не знает об этом и не появляется диалоговое окно загрузки. Мне не хватает чего-то простого, но я не могу его найти.

Мой звонок JS AJAX:

  $.ajax({
       url: theUrl,
       type: 'get',
       success: function(response){

       }      });

Конец моего скрипта на python:

def createZip(v, charset=None):

    with ZipFile(v +'.zip', 'w') as myzip:
        myzip.write(v +'.shp')
        myzip.write(v +'.shx')
        myzip.write(v +'.dbf')
        myzip.write(v +'.prj')

    return 'c:/dev/python/'+ v + '.zip'

createZip(fn)

1 Ответ

2 голосов
/ 09 мая 2019

Трудно сказать, основываясь на предоставленном ограниченном коде, но вот некоторые общие моменты:

  • sys.stdout.write собирается записывать в выходные данные приложения, выполняющего скрипт Python, а не вHTTP-ответ (если он не работает как приложение WSGI).
  • Если вы пишете HTTP-ответ в приложении типа WSGI, то вам нужно будет включить все тело HTTP-ответа, включая составную частьи заголовки типов контента, чтобы браузер знал, что возвращается (в противном случае это просто поток бессмысленных байтов).
  • Запрос на загрузку появится только в том случае, если браузер загружает страницу, возвращающую поток приложения / октеттип содержимого (или атрибут download установлен на привязке, которая ссылается на файл).
  • Вызов AJAX не приведет к загрузке в браузере переднего плана, он появится в инструментах разработчикаВкладка «Сеть» и переменная ответа AJAX будут содержать данные, но они не передаются автоматически.owser как загружаемый файл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...