node.jsで、zipファイルをデータがおいてあるサーバーから、
レスポンスを受け取って、フロントエンドのサーバーへ
ダウンロードしたいのですが、うまくいきません。
やりたいことはフロントエンドのサーバーを中継して、
ZIPファイルがおいてあるサーバーのデータをレスポンスを受け取って、
たらい回しにして取りに行くことで、流れとしては
→ブラウザのURLから、フロントエンドのサーバーのAPIをたたく、
→フロントエンドを提供するサーバーが、データがおいてあるサーバーにZIPファイルをAPIでリクエスト
→データがおいてあるサーバーは、ZIPをレスポンスで返す
→フロントエンドを提供するサーバーが受け取ったレスポンスをそのまま、ブラウザに返してダウンロードさせる。
です。
フロントエンドのサーバーと、データがおいてあるサーバーを立ち上げておいて、
ブラウザから例えば以下のようなURL
http://192.168.10.97:8081/api/download
をうつと、ダウンロードはされるのですが、壊れていて解凍できません。
どなたかお詳しい方おかしいところを教えてくれないでしょうか。フロントエンドのサーバーには、
zipファイルは置けないので、レスポンスを受け取って、そのままブラウザに返したいのです。
テストしているソースは以下の通りです。フロントエンドのサーバーで、レスポンスに
ヘッダを加えて、ZIPのbodyをブラウザに返すようにしているつもりですが・・・
(1)フロントエンドを提供するサーバー
js
1const express = require("express"); 2 3const app = express(); 4const http = require('http'); 5const server = http.createServer(app); 6 7const request = require('request'); 8 9app.get("/api/download", (req, res) => { 10 11 request('http://192.168.10.888:8088/getfile', (error, response, body) => 12 { 13 res.set({ 14 'Content-Type': 'application/zip', 15 'Content-Disposition': 'attachment; filename="sample.zip"' 16 }); 17 res.send(body); 18 }); 19 20}); 21 22app.get('/', (req, res) => res.send('Hello app')); 23app.listen(8081, () => console.log('Listening on port 8081')); 24
(2)データがおいてあるサーバー(/data/sample.zipがある)
js
1var fs = require('fs'); 2var http = require('http'); 3const express = require("express"); 4const app = express(); 5 6app.get('/getfile', function (req, res) 7{ 8 res.sendFile("/data/sample.zip"); 9}); 10 11app.get('/', (req, res) => res.send('Hello')); 12app.listen(8088, () => console.log('Listening on port 8088')); 13
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/04/03 03:32 編集
2021/04/03 06:48
2021/04/03 08:48
2021/04/03 08:57