Как загрузить файл, не используя элемент <a> с атрибутом загрузки или сервер?

В соответствии смогу ли я использовать download атрибут<a> элемент поддерживается вMicrosoft Edge build 10547+, ноне IE или Safari.

Как скачать файл объекта без использования<a> элемент сdownload атрибут или сервер?

 guest27131409 авг. 2017 г., 06:42
@ jdc91 Смотрите«Лучше, если вы можете изложить всю историю!» Увидетьstackoverflow.com/questions/38193605/..., stackoverflow.com/q/38195855
 guest27131407 авг. 2017 г., 02:04
@Dekel Смотрите критерии на OP,.responseType не был определен в тот момент в разработке браузера.
 Dehan de Croos09 авг. 2017 г., 06:17
Что вы имеете в виду без "сервера"?
 guest27131409 авг. 2017 г., 06:19
@ jdc91 Без запроса файла с сервера и без ответа сервера данными, имеющимиContent-Disposition заголовок. Использование браузера для предложения загрузки
 guest27131407 авг. 2017 г., 16:07
@Dekel не будет пытаться изменить контекст исходного вопроса после факта. УвидетьКак создать ArrayBuffer и URI данных из объектов Blob и File без FileReader? Там, где был опубликован ответ, который не соответствовал первоначальным критериям, хотя и было предоставлено решение, Кайидо точно указал соответствующий контекст.
 Dehan de Croos09 авг. 2017 г., 06:40
Каким будет содержимое файла. Лучше, если вы можете изложить всю историю! Между тем, вы можете попробоватьdeveloper.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
 Dekel06 авг. 2017 г., 23:42
Вы можете проверить мой ответ здесь:stackoverflow.com/questions/38524320/... Это дает именно то, что вы ищете.
 Dekel07 авг. 2017 г., 08:45
Вы ищете решение для 2016-совместимого браузера или 2017 года? :)

Ответы на вопрос(6)

FileSaver.js

Он поддерживает все распространенные браузеры.

Просто включите:

<script type="text/javascript" src="FileSaver.min.js"></script>

и используйте это как:

var file = new File(["Hello, world!"], "hello world.txt", {type: "text/plain;charset=utf-8"});
saveAs(file);

Замечания: Чтобы это работало также в Safari <6, Opera <15 и FireFox <20, необходимо включитьBlob.js как зависимость.

 guest27131409 авг. 2017 г., 15:19
ЯвляетсяFile конструктор доступен в браузерах, упомянутых в последнем предложении ответа?
 padr09 авг. 2017 г., 19:41
Нет, они этого не делают. (caniuse.com/#search=File) Но взгляните на документацию по FileSaver.js, есть и другие способы ее сохранения. Я надеюсь, что вы найдете это полезным. :)

используя как атрибут загрузки, так и jquery. атрибут загрузки не поддерживается в ie и safari / ios. Таким образом, вы можете использовать jquery, чтобы сделать это

 $('.download').click(function(e) {
    e.preventDefault();  //stop the browser from following
    window.location.href = 'uploads/file.doc';
});

<a href="no-script.html" class="download">Download</a>

следуйте механизму отправки формы для отображения страницы. В MVC мы можем использовать код ниже

Html
  @using (Html.BeginForm("GetAttachment", "User", FormMethod.Post))
                {

                    <button type="submit">Download</button>   
                }
MVC Controller
public ActionResult GetAttachment()
{
   string filename = "File.pdf";
string filepath = AppDomain.CurrentDomain.BaseDirectory + "/Path/To/File/" + filename;
byte[] filedata = System.IO.File.ReadAllBytes(filepath);
string contentType = MimeMapping.GetMimeMapping(filepath);

var cd = new System.Net.Mime.ContentDisposition
{
    FileName = filename,
    Inline = true,
};

Response.AppendHeader("Content-Disposition", cd.ToString());

return File(filedata, contentType);
}
 Pradeep Kumar Das09 авг. 2017 г., 16:04
пожалуйста, отошлите этоjohnculviner.com/...
 guest27131409 авг. 2017 г., 15:20
"без использования<a> элемент с атрибутом загрузки или сервер? "
 guest27131409 авг. 2017 г., 16:03
Не уверен, что вы имеете в виду?
 guest27131409 авг. 2017 г., 15:53
A <form> не нужно отправлять на сервер. Требование о том, чтобы не использовать сервер
 Pradeep Kumar Das09 авг. 2017 г., 16:03
могу ли я использовать $ .fileDownload ('/ url / to / download.pdf'); атрибут?
 guest27131409 авг. 2017 г., 16:09
Зачем нужен плагин jQuery?
 Pradeep Kumar Das09 авг. 2017 г., 15:51
используя форму мы отправляем данные на сервер, а сервер возвращает файл.

я хотел бы предложить два «взломанных» подхода:

Если файл очень маленький, вы можете использоватьa сhref='data:[<mediatype>][;base64],<data>'.

Это может позволить вам добавить расположение контента вmediatype, эмулируя заголовок HTTP. Этот хак тоже не так переносим, ​​как можно было бы надеяться.

Для небольших и средних файлов можно загрузить файл с помощью AJAX, а затемиспользуйте API файлов Javascript для запроса сохранения файла (API не поддерживает сохранение, но его легко преобразовать в URL-адрес данных).

Если вы хотите избежать API файлов Javascript, вы можете попробовать эмулировать щелчок якоря, какпредложил здесь.

Опять же, как отметил Лео Фармер, эти решения не могут обещать, что браузер не откроет файл в новой вкладке, а не сохранит его на диске, но я думаю, что можно с уверенностью сказать, что все пользователи смогут грациозно ухудшаться доcmd+S или жеctrl+S Сочетание клавиш :-)

Ты можешь использоватьdata URI data:[<mediatype>][;base64],<data> представление файла, созданного вручную или использующегоFileReader(), .readAsDataURL(), сMIME тип установлен вapplication/octet-stream, encodeURIComponent(), window.open()

<script>
  var file = "data:application/octet-stream,"
             + encodeURIComponent("<!DOCTYPE html>"
             + "<html><body>"
             + "<div>abc</div>"
             + "</body></html>");
  var saveFile = window.open(file, "_self");     
</script>

<script>
  var blob = new Blob(["abc"], {type:"text/plain"});
  var reader = new FileReader();
  reader.addEventListener("load", function(e) {
    // replace existing `MIME` type with `application/octet-stream`
    var file = "data:application/octet-stream;" 
                + e.target.result.split(/;/)[1];
    var saveFile = window.open(file, "_self");
  });
  reader.readAsDataURL(blob)
</script>

plnkrhttp://plnkr.co/edit/IS1OC0laRwL3BuuF9zay?p=preview

Решение Вопроса

ые из них:

Используйте форму:

<form method="get" action="mydoc.doc">
<button type="submit">Download</button>
</form>

Используйте JavaScript:

<button type="submit" onclick="window.open('mydoc.doc')">Download</button>
 Leo Farmer08 авг. 2017 г., 21:50
Пользователь может выбрать сохранение контента, который он видит, через плагин браузера. Однако вы не можете форсировать загрузку с внешнего интерфейса. Видеть это:stackoverflow.com/questions/8613725/...
 Star08 авг. 2017 г., 11:37
Что делать, если у пользователя есть плагин для браузера, который открывает mydoc.doc? тогда как это будет скачиваться?

Ваш ответ на вопрос