Загрузить атрибут с именем файла не работает?
Атрибут загрузки используется для того, чтобы браузеры загружали ресурс, а не ориентировались на него. И в качестве опции можно указать новое имя файла для загруженного файла.
Обратите внимание, что не все браузеры поддерживают это. См. http://caniuse.com/#feat=download
Предположим, что у нас была следующая привязка:
<a href="#" onclick="location.href='http://video-js.zencoder.com/oceans-clip.mp4'; return false;" download="video.mp4"> download </a>
Нажимая на ссылку, я ожидаю загрузить файл с именем, video.mp4. Но фактическое имя файла, которое является oceans-clip.mp4, использовалось для загруженного файла. Вы знаете, почему имя нового файла здесь не использовалось?
(Я проверил это с Chrome)
Спасибо!
Ответы
Ответ 1
В соответствии с ссылкой на элемент HTML → [a]
Может использоваться с blob: URL-адресами и данными: URL-адресами, чтобы пользователи могли загружать контент, который сгенерирован программным способом с использованием JavaScript (например, изображение, созданное с использованием веб-приложения онлайн-графики).
Если HTTP-контент Content-Disposition: присутствует и дает другое имя файла, чем этот атрибут, заголовок HTTP имеет приоритет над этим атрибутом.
Если этот атрибут присутствует, а Content-Disposition: установлен в строку, Firefox дает приоритет Content-Disposition, например, для случая с именем файла, в то время как Chrome отдает приоритет атрибуту загрузки.
Этот атрибут выполняется только для ссылок на ресурсы с одинаковым происхождением.
Это не из одного и того же происхождения, поэтому он не будет работать.
Ответ 2
Это возможно с помощью JavaScript, хотя поддержка браузера была бы пятнистой. Вы можете использовать XHR2 для загрузки файла с сервера в браузер в виде Blob, создания URL-адреса в Blob, создания привязки с его свойством href и установки его на этот URL-адрес, чтобы установить свойство загрузки в любое имя файла, которое вы хотите а затем нажмите ссылку. Это работает в Google Chrome, но я не проверял поддержку в других браузерах.
window.URL = window.URL || window.webkitURL;
var xhr = new XMLHttpRequest(),
a = document.createElement('a'), file;
xhr.open('GET', 'someFile', true);
xhr.responseType = 'blob';
xhr.onload = function () {
file = new Blob([xhr.response], { type : 'application/octet-stream' });
a.href = window.URL.createObjectURL(file);
a.download = 'someName.gif'; // Set to whatever file name you want
// Now just click the link you created
// Note that you may have to append the a element to the body somewhere
// for this to work in Firefox
a.click();
};
xhr.send();