Javascript 服务器端python返回zip文件进行下载

Javascript 服务器端python返回zip文件进行下载,javascript,python,ajax,Javascript,Python,Ajax,使用我的客户机,我通过get将一个参数传递给服务器上的python脚本,它运行一个进程并创建一个zip文件。在我的客户端JavaScript中,我的ajax调用告诉我它能够将数据传递给我的python脚本 我试过sys.stdout.write(b“zipfilename”)但什么也没发生。如果我不能将文件传回,有没有办法传回一些东西,让我的JavaScript知道它已经完成了?我没有使用节点或角度。我的python脚本确实在服务器上运行并创建了zip文件,但JavaScript页面不知道它,也

使用我的客户机,我通过get将一个参数传递给服务器上的python脚本,它运行一个进程并创建一个zip文件。在我的客户端JavaScript中,我的ajax调用告诉我它能够将数据传递给我的python脚本

我试过
sys.stdout.write(b“zipfilename”)
但什么也没发生。如果我不能将文件传回,有没有办法传回一些东西,让我的JavaScript知道它已经完成了?我没有使用节点或角度。我的python脚本确实在服务器上运行并创建了zip文件,但JavaScript页面不知道它,也没有出现下载对话框。我缺少一些基本的东西,但我找不到

我的JS AJAX调用:

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)

根据提供的有限代码很难判断,但这里有一些要点:

  • sys.stdout.write
    将写入运行Python脚本的应用程序的输出,而不是HTTP响应(除非它作为WSGI应用程序运行)
  • 如果要在WSGI类型的应用程序中编写HTTP响应,则需要包含整个HTTP响应主体,包括多部分和内容类型头,以便浏览器知道返回的内容(否则它只是一个无意义字节的提要)
  • 仅当浏览器加载返回应用程序/八位字节流内容类型的页面(或链接到文件的锚点上设置了
    download
    属性)时,才会出现下载提示
  • AJAX调用不会导致在前台浏览器中进行下载,它会出现在开发人员工具的“网络”选项卡中,AJAX响应变量会包含数据,但不会自动将其作为可下载文件推送到浏览器中

Ugh,我让IIS作为WSGI应用程序运行python脚本。你的答案看起来是对的,但我得花点时间才能弄明白。你告诉我我对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)