2016-04-12 38 views
3

ファイルをダウンロードする必要があります。これはAJAXを介してトリガーされます。私のコードは一時フォルダ内のURLから画像を取得し、この一時フォルダ内のファイルのメモリ内ジップを作成します。私はクライアントにファイルパスをプッシュしたい。どうすればいい?私は道を提出し、伝統的なフォームを使用する場合AJAX経由でZIPファイルを返す

#This function creates a temp folder, downloads images in it and returns the path 
temp_dir = retrieve_images(file_paths) 

in_memory_loc = io.BytesIO() 

zipf = zipfile.ZipFile(, 'w') 
zipdir(temp_dir, zipf) 
zipf.close() 

#remove the temp directory 
shutil.rmtree(temp_dir) 

in_memory_loc.seek(0) 

#output the zip file to the browser 
return send_file(in_memory_loc, attachment_filename='site_images.zip', as_attachment=False) 

これは動作します:

は、ここに私ビュンコードです。しかし、私はこれをAJAXに戻す必要があります。 AJAX上でファイルを返すのは不可能だと思われますので、私はzipファイルのパスを返す必要があります。どうすればいい?

+0

この質問からコードとPythonタグを削除することをお勧めします。一般的なWeb質問にはPythonやzipファイルとは関係がないため、 –

+0

はい、私が使用している言語はPythonです。人々は一般に、コーディングしている言語の回答を見つける傾向があります。 –

答えて

1

そのリソースへのURLを作成し、それをajaxに送り返して、でダウンロードをトリガーします。成功機能

にあなたは、あなたがURL

+0

それはちょうど私が立ち往生している場所です。どのようにしてメモリ内の場所へのURLを作成しますか? –

1

You can't prompt a file download with an XHR responseを構築するために必要なものをすべて持っているので、サーバはコンテンツに保持する必要があります一時ディレクトリの名前とファイルの名前を持っていますzipファイルを開き、クライアントがダウンロードを実行するための2回目のHTTP要求を行うのを待ちます。

1つの方法は、ランダムに生成されたキーの下でmemcacheにコンテンツを格納し、XHR応答でキーを戻すことです。次に、クライアントはXHR以外の要求でそのキーをサーバに戻してファイルを要求することができます。

+0

メモリ内の場所へのURLはどのようにして作成できますか?または、同じzipファイルを同じtempの場所に格納するようにzipfileにどのように伝えるのですか?謝罪、私は初心者です。 –

+0

私は提案を含めました - 私の編集を参照してください。 –

関連する問題