1

fineuploader が iPad で動作するかどうかを確認しましたが、ほとんどの場合動作しますが、iPad では「image.jpg」という 1 つのファイルしか返されないため、アップロードされたすべてのファイルが前のファイルを上書きし続けます。(または、1 つのファイルをアップロードするだけです) いずれにせよ、この動作は 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
            }
        }
    });
});
4

1 に答える 1

0

これは、Fine Uploader ではなく、iOS の設計によるものです。ほら、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 でアップロードするユーザーが互いのファイルを上書きしないことが保証されるだけでなく、任意のプラットフォームで 2 人のユーザーが同じ名前の 2 つの異なるファイルをアップロードしても、お互いのつま先を踏まないことが保証されます。

共有したいサーバー/クライアント側のコードがある場合は、私が覗いて修正し、私の回答とともにここに投稿できます。

于 2013-08-09T19:00:47.117 に答える