iOS和iPad中的精细上传器

时间:2013-08-09 18:39:41

标签: fine-uploader

我检查过fineuploader是否在iPad上运行,并且它主要用于,但iPad只返回一个文件“image.jpg”,因此上传的每个文件都会覆盖以前的文件。 (或者只是上传一个文件) 在任何情况下,可以在iPad上的Chrome或Safari上修复此行为吗?

我们正在使用图书馆上传图片以满足不同的业务需求,其工作就像梦一样。谢谢你开发这个。

克里希纳

这是我的代码:

我正在动态创建端点并上传不同文件夹的文件。它上传到除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
            }
        }
    });
});

1 个答案:

答案 0 :(得分:0)

这是由于iOS的设计,而不是Fine Uploader。请参阅,iOS为您命名文件 - 确切地说是“image.jpg”。

Fine Uploader通过生成4级UUID并将其与上传请求一起发送来缓解此问题。要在请求正文中查找的参数是qquuid

我猜你的服务器只根据文件名保存文件。更强大的解决方案是使用文件的UUID和文件名的组合,以确保用户不会覆盖已存在的文件。

您的服务器可以将UUID添加到文件名:

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

或创建一个全新的文件夹:

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

这不仅可以确保在iOS上上传的用户不会覆盖彼此的文件,还可以确保任何平台上的两个用户上传两个具有相同名称的不同文件踩到对方的脚趾。

如果你有任何服务器/客户端代码,你可以分享,我可以看一看,修改它并在这里发布我的答案。