Есть ли способ «имитировать» команду «сохранить как» правой кнопкой мыши или принудительно загрузить файл в браузер с помощью JavaScript? - PullRequest
6 голосов
/ 14 сентября 2010

У меня такая ситуация, когда у нас есть медиафайлы, хранящиеся в глобальном CDN. Наше веб-приложение размещается на его собственном сервере, а затем, когда нужны медиа-ресурсы, они вызываются из URL CDN. Недавно у нас была страница, на которой пользователь мог загружать вложения файлов, однако некоторые типы файлов открывались в браузере вместо загрузки (например, MP3). Единственный способ обойти это - вручную указать HTTP-ответ для прикрепления файла, но единственный способ, которым я смог добиться этого, - это загрузить файл из CDN на мой сервер и затем передать его обратно пользователю, что лишает его цели на глобальном CDN. Вместо этого мне интересно, есть ли какое-нибудь решение на стороне клиента для этого?

РЕДАКТИРОВАТЬ: Просто где-то нашел это, хотя я не уверен, будет ли это работать правильно во всех браузерах?

<body>
<script>
function downloadme(x){
myTempWindow = window.open(x,'','left=10000,screenX=10000');
myTempWindow.document.execCommand('SaveAs','null','download.pdf');
myTempWindow.close();
}
</script>

<a href=javascript:downloadme('/test.pdf');>Download this pdf</a>
</body>

РЕДАКТИРОВАТЬ: Ну что ж, так много за эту идею -> Работает ли execCommand SaveAs в Firefox?

Ответы [ 2 ]

2 голосов
/ 14 сентября 2010

Позволяет ли ваш CDN указывать заголовки HTTP? Amazon Cloudfront делает, например.

1 голос
/ 20 февраля 2014

Я нашел простое решение, которое сработало для меня. Добавьте параметр URL к имени файла. Это заставит браузер обходить встроенные отображения файлов. Например, вместо http://mydomain.com/file.pdf установите ссылку на стороне клиента так, чтобы она указала на http://mydomain.com/file.pdf? (добавлен знак вопроса)

...