この質問は以前に公正なビットが要求されていましたが、私が見たソリューションはどれも動作していないようです。私が最終的に望むCSVはプライベートS3バケットにあり、セキュリティミドルウェアのためにNodeJSエンドポイント経由で取得する必要があります。 APIのコードは次のとおりです。角を使用してCSVファイルをトリガする
exports.download = function(req, res) {
var recording = req.vsRecording,
s3 = new AWS.S3();
if(recording.data_uri){
try{
res.set('Content-Type', 'application/octet-stream');
var fileStream = s3.getObject({Bucket: 'processing-dispatched', Key: recording._id + '/aggregated.csv'}).createReadStream();
fileStream.pipe(res);
}
catch(err){
res.status(500).json({error: err});
}
}
else {
res.status(500).json({error: 'Recording does not have a report file.'});
}
};
これは完全に機能し、ファイルの内容をブラウザに戻すことができます。間違ってしまうと、そのコンテンツをファイルダウンロードとして開くようにしようとしています。ストリームのダウンロードを処理する特別な方法はありますか?
私が持っているのはクライアント上のこのコードです。このコードは、adblockerをオフにするとlocalhostで動作するようですが、実際には動作しません。
$scope.download = function(){
Report.download($state.params.recordingId).then(function(data){
var csvContent = "data:text/csv;charset=utf-8," + data.toString();
var encodedUri = encodeURI(csvContent);
window.open(encodedUri);
});
Report.downloadは、それは約束を返し、データ変数内のファイルの内容を解決し、ちょうど私のノードのエンドポイントの周りの角度サービスラッパーです。
を試すことができます
fs
でnode
でファイルを作成し、さまざまな方法で事を試してみて、Front-end
または
へのURLを返すことができます!私はこれをやったが、私の元の質問に少し微調整して終わった。ファイルをブラウザにスチームするのではなく、有効期限が15分のS3ファイルの署名済みURLを作成しました。その後、このURLをブラウザに戻して、このコードを使用してhrefを設定し、リンクをクリックしました。 – Mark