2 回答

TA貢獻1873條經驗 獲得超9個贊
您的應用程序的后端是什么?我在 C# (.NET Core) 中使用它來獲取文件的內容類型,然后將其設置為響應中的標頭:
public string GetContentType (string filePath) {
var contentTypeProvider = new FileExtensionContentTypeProvider();
string contentType;
if( !contentTypeProvider.TryGetContentType( filePath, out contentType ) ) {
contentType = "application/octet-stream";
};
return contentType;
}
編輯:修改 OP 代碼以動態處理內容類型:
var headers = response.headers;
var responseType = headers['content-type'];
var fileType = "text/plain";
var fileName = "report.txt";
if ( responseType == "application/octet-stream" ) {
fileType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
fileName = "report.xlsx";
}
var blob = new Blob([response.data], {
type: fileType
});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = fileName;
link.click();

TA貢獻1828條經驗 獲得超4個贊
您可以使用標題的內容類型獲取文件擴展名。
使用這個 Javascript 庫 - node-mime
您只想傳遞您的headers['content-type'],它將為您提供需要為下載名稱設置的文件擴展名。
var ctype = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
console.log(mime.getExtension(ctype));
<script src="https://wzrd.in/standalone/mime@latest"></script>
示例:在您的情況下,
var headers = response.headers;
var blob = new Blob([response.data], {
type: headers['content-type']
});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "report." + mime.getExtension(headers['content-type']);
link.click();
Mozilla 開發人員提供的 MIME 類型列表不完整。
添加回答
舉報