Тонкий загрузчик в iOS и iPad

Я проверил, работает ли Fineuploader на iPad, и в основном он работает, но iPad возвращает только один файл «image.jpg», поэтому каждый загруженный файл продолжает перезаписывать предыдущий файл. (Или просто загружает один файл) В любом случае, можно ли исправить это поведение в Chrome или Safari на iPad?

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

Кришна

вот мой код:

Я динамически создаю конечную точку и загружаю файлы для разных папок. Его загружают для другой платформы, кроме iOS.

$(document).ready(function () {
    $('#s3-fileuploader').fineUploader({
        request: {
            endpoint: '',
            inputName: 'filename',
            forceMultipart: true,
            paramsInBody: true,
            params: {},
        },
        failedUploadTextDisplay: {
            mode: 'custom',
            maxChars: 40,
            responseProperty: 'error',
            enableTooltip: true
        },
        cors: {
            expected: true, //all requests are expected to be cross-domain requests
            sendCredentials: false, //if you want cookies to be sent along with the request
            allowXdr: true
        },
        autoUpload: true,
        multiple: true,
        debug: true,
        text: {
            uploadButton: '<i class="icon-plus icon-white">Select Files</i> '
        },
        deleteFile: {
            enabled: false,
            forceConfirm: true,
        },
        validation: {
            // allowedExtensions: ['jpeg', 'jpg', 'gif', 'png'],
            itemLimit: 75
        }
    }).on('submit', function (event, id, name) {
        $(this).fineUploader('setEndpoint', endPoint); //set endpoint
    }).on('complete', function (event, id, fileName, response) {
        var $deleteEl = $(
            '<span class="delete">&#160;&#160;<a href="javascript:;" onclick="deleteFile(\'' +
            response.deleteFileUrl + '\',\'' + id +
            '\')">Delete</a></span>&#160;&#160;');
        //when you delete element is clicked, call the "deleteFile" API method, passing in that file's ID
        if (response.success) {
            $(".qq-uploader").append(
                '<div class="highlight" style="margin-top:8px;margin-right:8px;float:left;width:180px;height:194px; box-shadow:1px 0 0 #F3F3F3, 0 1px 0 #E4E4E4, 0 -1px 0 #F3F3F3, -1px 0 0 #F3F3F3" class="thumb" id="thumb_' +
                id + '"></div>');
            //get file name from responce
            var filename = getFileName(response.getThumbnailUrl);
            //get file extension now
            var fileExt = filename.split('.').pop().toLowerCase();
            //create array of all available extenions images
            var exts = ["csv", "doc", "docx", "xls", "zip", "pdf",
                "txt"
            ];
            //check if its a image
            if (fileExt == 'jpeg' || fileExt == 'jpg' || fileExt ==
                'png' || fileExt == 'gif' || fileExt == 'tiff' ||
                fileExt == 'tif' || fileExt == 'bmp' || fileExt ==
                'wbmp') {
                //myother logic
            }
        }
    });
});

person Krishna Bhatt    schedule 09.08.2013    source источник


Ответы (1)


Это связано с дизайном iOS, а не Fine Uploader. Видите ли, iOS называет файлы для вас — «image.jpg», если быть точным.

Fine Uploader смягчает эту проблему, генерируя UUID уровня 4 и отправляя его вместе с запросом на загрузку. Параметр, который нужно искать в теле запроса, — qquuid.

Я предполагаю, что ваш сервер сохраняет файлы только на основе их имени. Более надежным решением было бы использовать комбинацию UUID файла и имени файла, чтобы пользователи не перезаписывали уже существующие файлы.

Ваш сервер может добавить UUID к имени файла:

4A0BC570-0125-11E3-B778-0800200C9A66_image.jpg

или создайте совершенно новую папку:

4A0BC570-0125-11E3-B778-0800200C9A66/image.jpg

Это не только гарантирует, что пользователи, загружающие на iOS, не перезапишут файлы друг друга, но также гарантирует, что два пользователя на любой платформе, загружающие два разных файла с одинаковым именем, не наступят на пальцы ног друг друга.

Если у вас есть код на стороне сервера/клиента, которым вы хотели бы поделиться, я могу взглянуть, изменить его и опубликовать здесь со своим ответом.

person Mark Feltner    schedule 09.08.2013
comment
Я использую этот cors и загружаю изображения в aws s3, динамически создаю конечную точку и загружаю файлы в разные папки. Во всех браузерах работает нормально, даже в сафари работает нормально. запрос: {конечная точка: '', inputName: 'имя файла', forceMultipart: true, paramsInBody: true,}, cors: {ожидаемый: true, sendCredentials: false, allowXdr: true}, - person Krishna Bhatt; 10.08.2013
comment
@krishnaBhatt sendCredentials по умолчанию имеет значение false, forceMultipart по умолчанию имеет значение true, как и paramsInBody. Нет необходимости устанавливать эти значения. Кроме того, если вы не используете функцию удаления файла, почему вы устанавливаете для параметра allowXdr значение true? - person Ray Nicholus; 10.08.2013
comment
Я использую функцию удаления. поскольку мы не используем UUID для создания файлов на сервере, следовательно, не отправляем их и на сервер. поэтому я не мог использовать функцию удаления Fine-uploader, поэтому создал собственную функцию удаления jquery. так как мы используем это с java-приложением cloudbees и отправляем большинство параметров в строке запроса... нужен ли этот UUID для загрузки ios или мы можем справиться с этим и другим способом? - person Krishna Bhatt; 11.08.2013
comment
UUID не обязательно должен быть там, но знайте, что ваши пользователи iOS будут перезаписывать файлы друг друга, если это не так. Просто подумайте об этом, вам нужно какое-то псевдослучайное имя для каждого файла, чтобы ваши пользователи не сохраняли файлы с одним и тем же именем и не перезаписывали загрузки друг друга. UUID предоставляется вам Fine Uploader для решения этой проблемы. - person Mark Feltner; 12.08.2013
comment
У меня может быть другая проблема, но она точно такая же и затрагивает только iOS. И это не имеет ничего общего с одинаковыми именами файлов, вместо этого происходит то, что когда я загружаю изображение, оно добавляется в список изображений, когда я затем загружаю новое изображение (снова нажав ту же кнопку загрузки), первый изображение исчезает. Таким образом, список никогда не содержит более одного изображения. Опять же, это только в iOS. В Android/Windows/Whatever каждое новое изображение добавляется в список, как и ожидалось. - person powerbuoy; 13.04.2015