2013-02-22 5 views
1

Я общаюсь с сервисом WCS и должен отправлять HTTP-запросы POST с XML на сервер для извлечения (бинарных) растровых файлов.Загрузка файлов через POST

Мне удалось загрузить файл с помощью jQuery ajax, но я не могу сохранить фактическое содержимое файла в локальной файловой системе.

Есть ли способ достичь этого? Я предпочитаю использовать встроенный менеджер загрузок для управления загрузкой.

+0

В настоящее время не представляется возможным, чтобы вызвать по умолчанию браузера «Сохранить файл» диалог для асинхронных запросов или удастся сохранить отправленный файл в противном случае в локальной файловой системе. Есть ряд других вопросов StackOverflow по этой теме. – marekful

+0

@ MarcellFülöp: Я уже просматривал связанные темы на SO, но я не смог найти точное совпадение с моим вопросом. С другой стороны, с HTML 5 должны быть способы сохранения файлов в локальной системе с помощью JavaScript, но я бы скорее использовал диспетчер загрузки браузера. – Constantinius

ответ

2

Да, вы можете сохранять файлы с Javascript. В основном он генерирует blob, содержащий двоичные данные, затем создает ссылку на этот blob с атрибутом «загрузить» HTML5, чтобы указать желаемое имя файла и, наконец, имитирует щелчок по этой ссылке.

// Limited browser support! (latest release versions of Firefox & Chrome are OK) 
var DownloadAttributeSupport = 'download' in document.createElement('a'); 
function showSave(data, name, mimetype) { 
    var blob, url, builder = new BlobBuilder(); 
    builder.append(data); 
    if (!mimetype) mimetype = "application/octet-stream"; 
    if (DownloadAttributeSupport) { 
     blob = builder.getBlob(mimetype); 
     url = URL.createObjectURL(blob); 
     var link = document.createElement("a"); 
     link.setAttribute("href",url); 
     link.setAttribute("download",name||"Download.bin"); 
     // Now I need to simulate a click on the link. 
     // IE 10 has the better msSaveBlob method and older IE versions do not support the BlobBuilder interface 
     // and object URLs, so we don't need the MS way to build an event object here. 
     var event = document.createEvent('MouseEvents'); 
     event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null); 
     link.dispatchEvent(event); 
} 

Вы shoudlk посмотреть на https://stackoverflow.com/a/13059556/2227298 для более полного ответа относительно альтернативных кодов для браузеров, не поддерживающих HTML5 < загрузку >

Смежные вопросы