как получить MIME-тип из типа содержимого - PullRequest
3 голосов
/ 07 октября 2019

Дело в том, что Axios вызывает возврат файлов. иногда xlsx, иногда обычный txt.

В javascript, как только я их получаю, я принудительно загружаю его через blob.

Примерно так:

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.xlsx";
link.click();

КакВы видите, я получил что-то вроде этого: link.download = "report.xlsx". Я хочу заменить xlsx динамическим типом пантомимы, чтобы иногда он был report.txt , а иногда report.xlsx .

Howсделать это из содержимого типа?

Ответы [ 2 ]

1 голос
/ 07 октября 2019

Вы можете получить расширение файла, используя тип содержимого заголовков.
Используйте эту библиотеку 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();

Неполный список типов MIME от разработчиков Mozilla.

1 голос
/ 07 октября 2019

Какая база у вашего приложения? Я использовал это в 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...