私は私がしたいことに非常に近いと思います。私はSQL Serverデータベースからファイルvarbinary(MAX)を取得しているnode.jsの次のapi getメソッドを持っています。挿入前にbase64でエンコードされた文字列から変換され、コンテンツタイプの情報が文字列から削除されました。正常に動作しますが、何それを取得し、ユーザーのダウンロードを要求するように角度で行うには私のために明らかになっていない、また多くは限りがあったnode.jsから送信されたバイト配列からの角度ダウンロードファイル
のNode.js
router.get('/getFile', (req, res) => {
console.log("Calling getFile for file " + req.query.serialNumber + ".")
var serialNumber = req.query.serialNumber;
let request = new sql.Request(conn);
request.query('SELECT FileName + \'.\' + FileExtension AS \'File\', FileType, ContentType, SerialNumber, Chart ' +
'FROM dbo.ChangeFiles ' +
'WHERE SerialNumber = ' + serialNumber)
.then(function (recordset) {
log("Successfully retrieved file " + recordset[0].SerialNumber + " from database.");
log("Length of blob " + recordset[0].File + " is " + recordset[0].Chart.length)
res.status(200);
res.setHeader('Content-Type', recordset[0].ContentType);
res.setHeader('Content-Disposition', 'attachment;filename=' + recordset[0].File);
res.end(Buffer.from((recordset[0].Chart)));
}).catch(function (err) {
log(err);
res.status(500).send("Issue querying database!");
});
});
オンラインでヘルプ/リソースとして。ここまでは、私がこれまでサービスクラスで持っていたことがあります。あなたが見ることができるように
fileDownload.service.ts
downloadFile(serialNumber: string): Observable<any> {
return this.http.get(this.baseURL + '/getFile', { params: { serialNumber: serialNumber } })
.map(this.extractFile);
}
private extractFile(response: Response) {
const file = new Blob([response.blob]);
FileSaver.saveAs(file);
// const url = window.URL.createObjectURL(file);
// window.open(url);
return file;
}
私はアプローチのカップルを試みました。コメントアウトされたextractFileメソッドの部分はまったく機能しませんでした.FileSaver.saveAs関数を使用すると、不明なタイプのファイルがダウンロードされるため、node.jsから送信されたヘッダーはファイル自体に影響していないようです。
タイプに関係なく、ファイルを正常にダウンロードできるように、誰かがnode.jsから正常に送信されているものでAngularで進める方法をアドバイスできますか?
ありがとうございます。