Загрузить атрибут с именем файла не работает?

Атрибут загрузки используется для того, чтобы браузеры загружали ресурс, а не ориентировались на него. И в качестве опции можно указать новое имя файла для загруженного файла.

Обратите внимание, что не все браузеры поддерживают это. См. 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();