Есть много вопросов о загрузке файлов с Android, но большинство из них без ответа, и на самом деле ни один из них не связан с javascript или php. Я наблюдаю странное поведение при выборе файла для загрузки в собственном браузере Android (4.4.4) (HTC One_M8), и это дает мне следующее:
C:\fakepath\image:12045
Часть «Fakepath» меня не беспокоит, меня беспокоит то, что я не могу получить имя файла из тега /input type="file"/ html. Я отправляю файлы с помощью $.ajax, и он работает в Chrome, FF, Safari (рабочий стол и iPhone). Он также работает на моем M8 с Chrome, но не в родном браузере.
Это то, что я использую для получения выбранных файлов;
var filedata = document.getElementById("userFile");
formdata = false;
if (window.FormData) {
formdata = new FormData();
}
var i = 0, len = filedata.files.length, img, reader, file;
for (; i < len; i++) {
file = filedata.files[i];
if (window.FileReader) {
reader = new FileReader();
reader.onloadend = function(e) {
// showUploadedItem(e.target.result, file.fileName);
};
reader.readAsDataURL(file);
}
if (formdata) {
formdata.append("userFile[]", file);
}
}
И вот как я отправляю их в handle.php
$.ajax({
url: 'handle.php',
type: 'POST',
xhr: function() {
var myXhr = $.ajaxSettings.xhr();
if(myXhr.upload){
}
return myXhr;
},
data: formdata,
dataType:'json',
cache: false,
contentType: false,
processData: false,
beforeSend: function(xhr, opt) {
$('#control-console').append($('input[type=file]').val());
$('input[type=file]').val("");
},
success: function() {
},
complete: function(podatki) {
$('#control-console').append(podatki.responseJSON.name);
console.log(podatki)
$.each(podatki.responseJSON.name, function(i, val) {
console.log(val);
insertFrame(val);
});
processing = false;
}
});
Я не нашел никакой документации по этому поводу, поэтому я действительно не знаю, является ли это ошибкой в собственном браузере Android или мне нужно использовать другой подход.
Кто-нибудь сталкивался с такой же проблемой и, возможно, нашел решение?
2 ответа
Я много исследовал и сделал решение только для Android. Когда вы находитесь в браузере и на iPhone, вы можете использовать свое решение, поскольку оно работает отлично. Но у андроида есть проблема с безопасностью. Итак, мне пришлось сделать решение для Android.
Вы можете следить за моим решением здесь.
Что я исследовал за последние несколько часов, так это то, что загружаемый файл находится в галерее для телефона Android из-за проверок безопасности, описанных выше, возникает проблема. Ни имя файла, ни расширение, ни размер не будут читаемы.
Чтобы решить эту проблему: 1- Нажмите кнопку обзора, и вы попадете в галерею вашего устройства. 2- В правом углу галереи нажмите «Параметры изображения» («...») и включите «Внутреннее хранилище». 3- Убедитесь, что файл, который вы загружаете, находится во внутренней памяти. 4- Доступ к опции «Внутреннее хранилище» во время загрузки. 5- Файл должен показывать правильное имя.
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.