2016-10-26 2 views
4

Я использую XHR для загрузки изображения на внешний сервер с включенным CORS.Safari 10 на Mac не загружает файл в XHR

все работает отлично в Chrome, Firefox и IE.

Но с использованием Safari ответ сервера с ошибкой типа mime. говоря, что тип файла - «application/octet-stream», в то время как он должен быть «image/*».

После того, как я отключил проверку типа mime, сафари может загрузить файл, но все его пустой файл 0b.

любой знает почему?

var xhr = new XMLHttpRequest(); 
    xhr.open('POST', 'http://up-z1.qiniu.com/', true); 
    var formData; 
    formData = new FormData(); 
    formData.append('key', file.name); 
    formData.append('token', acessToken); 
    formData.append('file', file); 
    xhr.onreadystatechange = function (response) { 
     if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText != "") { 
      callback(true,null); 
     } else if (xhr.status != 200 && xhr.responseText) { 
      callback(false,null); 
     } 
    }; 
    xhr.send(formData); 

ответ

4

Так, согласно другому StackOverflow вопрос, я не могу вспомнить, один Safari имеет ошибку, когда другие браузеры file.toBlob(), сафари будет делать file.toString(). Таким образом, обходной путь будет записывать ваш собственный файл в функцию blob и загружать этот blob.

var xhr = new XMLHttpRequest(); 
xhr.open('POST', 'http://up-z1.qiniu.com/', true); 
var formData; 
formData = new FormData(); 
formData.append('key', file.name); 
formData.append('token', acessToken); 
formData.append('file', fileToBlob(file)); 
xhr.onreadystatechange = function (response) { 
    if (xhr.readyState == 4 && xhr.status == 200 && xhr.responseText != "") { 
     callback(true,null); 
    } else if (xhr.status != 200 && xhr.responseText) { 
     callback(false,null); 
    } 
}; 
xhr.send(formData); 
+0

Лучший ответ на эту проблему. @ arslan2012 Как вы это поняли? –