Загрузить файл без отображения URL-адреса

История

У меня были привязанные теги, показывающие имена файлов, которые при щелчке использовались для загрузки файла с URL-адреса S3. Мой клиент теперь требует, чтобы я скрывал URL-адрес, а не показывал его во время загрузки файла, а также использовал уникальное имя на S3 и не читаемое имя файла. При загрузке имя файла необходимо изменить на имя читаемого файла, указанное при загрузке.

Требования

Есть 2 требования

  1. Измените имя файла при загрузке.
  2. Скрыть файл url из Front End – View.

усилия

Усилия-1: использование метки привязки

Самое простое решение – создать тег привязки temp и использовать атрибут загрузки в теге привязки.

<a id="2135"></a> <script> function download(event) { var fileData = getFileData(event); var tempAnch = $('a').attr({href: fileData.url, download: fileData.name}); tempAnch.click(); tempAnch.remove(); }; </script> 

Это загружает файл, но по некоторым причинам не изменяет имя. Я не мог решить это после многих изменений.

Усилия-2: использование подхода Ajax

Теперь я попытался загрузить содержимое файла на стороне JS и сохранить его в файл.

 $.ajax({ type: 'GET', url: fileData.url, dataType: 'text', success: function(msg) { var blob = new Blob([msg], {type: fileData.mimeType}); saveAs(blob, fileData.name); } }); 

Теперь этот код сохраняет файл с требуемым именем, а содержимое – для текстового файла. Но для файла Excel или файла xlsx загруженный файл поврежден.

Есть ли возможное решение для загрузки xlsx, csv, txt или zip-файла без отображения URL-адреса пользователю и изменения имени файла при загрузке?

Это не так. Вы что-то загружаете, запрашивающий клиент знает, откуда он. Если вы хотите, чтобы ссылка использовалась только один раз или для определенного человека, вам необходимо передать ее через ваш сервер приложений.

Единственное другое решение – создать пользователей / разрешений на уровне S3, но даже тогда URL-адрес будет показан в какой-то момент.

Я бы не рекомендовал менять имя файла при каждой загрузке.

Тем не менее, установите собственный веб-сервер, создайте ключ для загрузки и позвольте пользователю вместо этого вызвать ваш URL. По запросу вы можете доставить файл и аннулировать ключ.

Просто имейте в виду, что если загрузка займет много времени, то ресурс на вашем веб-сервере обычно блокируется. Дешевый хостинг PHP в примере 1 и 1 хочет работать более чем для 10 одновременных пользователей (я пробовал :-))

Нелепость этого требования, несмотря на это, вот как вы сообщаете браузеру, как вызывать файл, который он загружает, когда файл сохраняется локально: вам нужно, чтобы S3 добавлял этот заголовок ответа:

 Content-Disposition: attachment; filename="the-desired-name.ext" 

Это можно сделать двумя способами:

Опция 1.

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

Вариант 2.

В подписанном URL-адресе скажите S3, чтобы добавить этот заголовок в ответ. Это добавит &response-content-disposition=attac... к подписанному URL-адресу, а S3 увидит это и добавит необходимый заголовок ответа.

Как вы это делаете, это зависит от того, что вы используете для создания предварительно подписанного URL (т. Е. Какого SDK, или если вы написали свой собственный, как и я).

Кроме того, при создании предварительно подписанного URL-адреса есть малоизвестная функция, которая позволяет вам определить, кому вы дали подписанный URL, прямо в URL-адресе. Поскольку подписанные URL-адреса не могут быть изменены или изменены без полного аннулирования URL-адреса, пользователю не рекомендуется использовать «общие» URL-адреса, которые они могут обнаружить, поскольку URL-адрес идентифицирует их. 🙂 Как это делается? Перед подписанием вы добавляете x-amz-meta-{anything}={anything-else} в URL. Пример: ...&x-amz-meta-downloaded-by=michael-sqlbot&... Часть S3, которая проверяет URL-адрес, потребует наличия этих параметров, чтобы URL-адрес соответствовал сигнатуре, но часть S3, которая фактически возвращает то, что загружается … игнорирует ее.

Конечно … если вы не используете предварительно подписанные URL-адреса, то это настоящая проблема, которая у вас есть … и скрытие URL-адреса – это просто попытка решить неправильную проблему. Любой минимально-сложный пользователь может определить URL-адрес, и я бы сказал, что нет возможной подлинной выгоды безопасности, которая должна быть достигнута, пытаясь скрыть это.

  • PHP: Экспорт таблицы в Excel без скрытых столбцов
  • Используйте jQuery для отправки данных Excel с помощью AJAX
  • Как импортировать файл Excel в API веб-ядра?
  • Укажите ширину столбца и высоту строки для excel, используя таблицу html.
  • VBA извлекает HTML-данные в Интернете после заполнения выпадающих списков и отправки поиска
  • В Datatable Excel Экспорт Zero Value ошибочен в PHP
  • Как экспортировать все строки таблицы HTML в файл Excel из таблицы с разбивкой на страницы?
  • Невозможно экспортировать таблицу HTML в Excel при использовании атрибутов в элементах таблицы
  • xls (excel) в диаграммы
  • Можно ли вызвать excel add in method с помощью программирования API JavaScript JavaScript?
  • Ошибка формата при экспорте таблицы HTML в Excel
  • Давайте будем гением компьютера.