Браузер скачать файл подсказку с использованием JavaScript - PullRequest
10 голосов
/ 07 апреля 2009

Мне было интересно, есть ли какой-нибудь способ реализовать запрос на загрузку файла браузера, используя JavaScript.

Моя причина - пользователи будут загружать файлы на локальный файловый сервер, к которому нельзя получить доступ с веб-сервера. Другими словами, оба будут на разных доменах!

Например, скажем, веб-сайты, размещенные на www.xyz.com, но файлы будут находиться на локальном файловом сервере с адресом, таким как \\10.10.10.01\Files\file.txt. Как загрузить / перенести файл на локальный файловый сервер ... используя ActiveX и VBscript! (не спрашивайте: -)

Итак, я храню локальный путь к файлу в моей базе данных и привязываю эти данные к сетке. Когда пользователь нажимает на эту ссылку, файл открывается в окне (с использованием JavaScript).

Проблема в том, что некоторые типы файлов, такие как текст, jpg, pdf и т. Д., Открываются в окне браузера. Как я смогу реализовать content-type или content-disposition, используя сценарии на стороне клиента? Это вообще возможно?

EDIT: локальный файловый сервер имеет общую папку окна, в которой сохраняются файлы.

Ответы [ 4 ]

6 голосов
/ 07 апреля 2009

«content-disposition: attachment» - практически единственный способ форсировать это, и он ДОЛЖЕН быть установлен в заголовке ответа.

4 голосов
/ 03 августа 2015

По состоянию на август 2015 года добавление атрибута «загрузить» в ваш тег обеспечивает поведение, которое вы ищете, по крайней мере в Chrome.

4 голосов
/ 07 сентября 2011

Если файл размещен на веб-сервере, как в вашем примере, вы можете сделать:

window.location.replace(fileUrl);

.. и браузер выяснит, что делать с файлом. Это прекрасно работает для большинства файлов, таких как .xls, .csv и т. Д., Но имейте в виду, что это не полная проверка, потому что настройки обработчика MIME пользователя будут определять, что делать с файлом ... т.е. файл .txt, скорее всего, будет отображаться в браузере и не будет иметь диалогового окна «загрузка файла».

1 голос
/ 07 апреля 2009

Вы можете попробовать использовать обычную гиперссылку с type="application/octet-stream". Кажется, работает в FF, но IE и Opera игнорируют атрибут.

...