【问题标题】:Fine-uploader in iOS and iPadiOS 和 iPad 中的精细上传器
【发布时间】:2013-08-09 18:39:40
【问题描述】:

我检查了 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
            }
        }
    });
});

【问题讨论】:

    标签: fine-uploader


    【解决方案1】:

    这是由于 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 上上传的用户不会覆盖彼此的文件,而且还可以确保 any 平台上的两个用户上传两个同名的不同文件'不要踩对方的脚趾头。

    如果您有任何服务器端/客户端代码想要分享,我可以查看、修改并在此处发布我的答案。

    【讨论】:

    • 我正在使用这个 cors 并将图像上传到 aws s3,我正在动态创建端点并将文件上传到不同的文件夹。它在所有浏览器中都可以正常工作,即使在 safari 中也可以正常工作。请求:{端点:'',inputName:'文件名',forceMultipart:true,paramsInBody:true,},cors:{预期:true,sendCredentials:false,allowXdr:true},
    • @krishnaBhatt sendCredentials 默认为 false,forceMultipart 默认为 true,paramsInBody 也是如此。无需设置这些值。另外,如果您不使用 deleteFile 功能,为什么要将 allowXdr 设置为 true?
    • 我正在使用删除功能。因为我们没有使用 UUID 在服务器上创建文件,因此也不会将其发送到服务器。因此我无法使用精细上传器的删除功能,因此创建了自己的 jquery 删除功能。因为我们将它与 cloudbees java 应用程序一起使用并在查询字符串中发送我们的大部分参数......这个 UUID 是否需要用于 ios 上传或者我们也可以以其他方式处理它?
    • UUID 不需要存在,但知道如果不存在,您的 iOS 用户将覆盖彼此的文件。想想看,每个文件都需要某种伪随机名称,以确保您的用户不会保存同名文件并覆盖彼此的上传文件。 Fine Uploader 为您提供 UUID 以缓解此问题。
    • 我可能遇到了不同的问题,但听起来确实是同一个问题,并且只影响 iOS。它与文件名相同无关,相反,当我上传图像时,它会被添加到图像列表中,然后当我上传新图像(再次单击相同的上传按钮)时,第一个图像消失。所以该列表永远不会包含超过一个图像。同样,这在 iOS 中是 only 的。在 Android/Windows/Whatever 中,每个新图像都按预期添加到列表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-22
    相关资源
    最近更新 更多