Я публикую файл в Javascript, используя новый интерфейс FormData.Когда я отправляю файл с использованием Safari 5.1.5 с использованием «multipart / form-data», Safari приводит файл в строку и вместо отправки фактического содержимого файла отправляет [object Object]
.
Пример:
var formdata = new FormData();
formdata.append("file", file);
var xhr = new XMLHttpRequest();
xhr.open("POST", "https://example.com/upload", true);
xhr.send(formdata);
Что отправляет Safari:
Origin: https://example.com/
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarycLc5AIMWzGxu58n8
Referer: https://example.com/upload
------WebKitFormBoundarycLc5AIMWzGxu58n8
Content-Disposition: form-data; name="file"
[object Object]
Поэтому мой файл загружен, но его содержимое, как вы уже догадались, [object Object]
.
Что в мире здесь происходит?Это ошибка Safari?
Редактировать 1
Для тех, кому интересно, как динамически генерировать JS Blob, вот пример:
var Builder = (window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder);
var builder = new Builder();
builder.append("hello, world");
var file = builder.getBlob("text/plain")
К сожалению, это не работает в Safari, так что это не помогло включить его в вопрос.
Редактировать 2
Файловый объект, на который я ссылаюсь, происходит от действия удаления элемента DOM,Вот пример того, как получить файл.После загрузки DOM выполните следующее:
function cancel(e) {
if (e.stopPropagation) {
e.stopPropagation();
}
if (e.preventDefault) {
e.preventDefault();
}
}
function drop(e) {
cancel(e);
for (var i=0; i<e.dataTransfer.files.length; i++) {
file = e.dataTransfer.files[i];
}
}
var elem = document.getElementById("upload-area");
elem.addEventListener("drop", drop, false);