Есть много вопросов о загрузке файлов с 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
Blue 9 Дек 2014 в 12:56
Вы получили какое-либо решение для этого? Я получаю ту же проблему в Android для файла PDF. Имя файла является поддельным именем файла, а тип файла пуст.
 – 
Setu Kumar Basak
8 Апр 2018 в 17:52
На самом деле я так и сделал, если вы используете скрипт загрузки файлов jQuery (github), вы не столкнетесь с этой проблемой. Приведенный выше код никогда не работал на всех телефонах и планшетах, поэтому лучше просто оставить его и использовать скрипт jQ.
 – 
Blue
13 Апр 2018 в 08:12

2 ответа

Я много исследовал и сделал решение только для Android. Когда вы находитесь в браузере и на iPhone, вы можете использовать свое решение, поскольку оно работает отлично. Но у андроида есть проблема с безопасностью. Итак, мне пришлось сделать решение для Android.

Вы можете следить за моим решением здесь.

0
Setu Kumar Basak 12 Апр 2018 в 07:24
Хотя ваше решение может работать, оно чертовски сложно. Но тем не менее, я надеюсь, что это помогло кому-то.
 – 
Blue
8 Авг 2019 в 15:29
Да. Я должен сделать это таким сложным образом из-за проблемы безопасности Android.
 – 
Setu Kumar Basak
8 Авг 2019 в 16:50

Что я исследовал за последние несколько часов, так это то, что загружаемый файл находится в галерее для телефона Android из-за проверок безопасности, описанных выше, возникает проблема. Ни имя файла, ни расширение, ни размер не будут читаемы.

Чтобы решить эту проблему: 1- Нажмите кнопку обзора, и вы попадете в галерею вашего устройства. 2- В правом углу галереи нажмите «Параметры изображения» («...») и включите «Внутреннее хранилище». 3- Убедитесь, что файл, который вы загружаете, находится во внутренней памяти. 4- Доступ к опции «Внутреннее хранилище» во время загрузки. 5- Файл должен показывать правильное имя.

-3
Kamran 13 Янв 2015 в 13:21