Можно ли сделать это? Более подробно:
- У меня есть файловый объект, который я получил из элемента ввода
- Я хочу загрузить это на сервер вместе с парой пар ключ/значение со связанными данными (имя файла и т.д.)
- Я хочу сделать это с помощью Ajax, потому что все остальное в системе использует Ajax, и я стандартизировал обработку успеха/неудачи на основе ответа сервера.
- Я хочу сделать это с кодировкой URL, потому что файл маленький, а сервер не реализует
multipart/form-data
Я пробовал несколько разных вещей, но ни одна из них не была совершенно правильной. Этот код отправляет данные файла «как есть» (т. е. фактически необработанный двоичный файл, а не как пару ключ-значение в кодировке URL):
var files = document.getElementById('idUploadBrowseInput').files;
var fdata = files[0];
var jqxhr = $.ajax({
type : "POST",
url : "/cgi-bin/upload_cgi",
timeout : 20000,
processData : false,
data : fdata
}).always(...etc)
Необработанный двоичный файл был бы в порядке, но мне также нужны другие пары ключ-значение, и, похоже, невозможно отправить их одновременно.
Если я изменю строку data : fdata
на data : {fdata : fdata}
, тогда данные POST просто станут [object Object]
(на FF). Если я удалю processData:false
, я получу исключение в jQuery.
API FileReader имеет несколько методов readAs
, которые, я думаю, мне следует использовать - предположительно, если я прочитаю содержимое файла в var
, тогда я могу просто отправить переменную как часть объекта данных, и все это должно просто работать. Однако это многословно, и я просто хочу сначала убедиться, что нет более прямого способа сделать это.
Обратите внимание, что это сообщение не отвечает вопрос.
cgi
штук? Пожалуйста, уточнитеobject
? Пробовалиfile
object
какbase64
строку? илиencodeURIComponent(file)
? ПопробуйтеBlob
иFileReder
? См. developer.mozilla.org/en-US/docs/Web/API. /Blob developer.mozilla.org/en-US/ docs/Web/API/File stackoverflow.com/questions/23140007/ - person guest271314   schedule 19.04.2014