FineUploader начать с удаления шаблона

Я использую FineUploader, но у меня есть одна проблема. Пользователь может загрузить изображение, но изображение может уже быть там (предыдущее загруженное). Когда уже есть изображение (предыдущее загруженное), я хочу показать ссылку для удаления, когда изображения нет.. я что показать ссылку для загрузки.

Как я могу переключаться между этими двумя состояниями? Специально на странице загружается.. а там уже изображение.

Точно знаю, что я просто удаляю и добавляю ссылки вручную.

$('.fine-uploader0 .qq-upload-list').append('Remove');

Могу ли я получить шаблон для каждого из них? и переключаться между ними?

Спасибо


person Pedro Luz    schedule 06.10.2013    source источник
comment
Я не совсем понимаю ваши требования здесь. Кроме того, неясно, как вы определяете, было ли уже загружено изображение. Пожалуйста, отредактируйте свой ответ, чтобы показать весь код на стороне клиента. Кроме того, пожалуйста, предоставьте описание вашего приложения. Опять же, немного сложно точно определить, что вы пытаетесь здесь сделать или какую конкретную проблему вы пытаетесь решить.   -  person Ray Nicholus    schedule 07.10.2013
comment
@RayNicholus: В вашем профиле stackoverflow уже есть одна ваша фотография. Итак, у вас уже есть одно фото в плагине. Не сложный. Если бы этот плагин был FineUploader... как бы вы сказали плагину, что уже есть одно изображение?   -  person Pedro Luz    schedule 07.10.2013


Ответы (2)


Нет хорошего кросс-браузерного способа определить, был ли файл уже отправлен. Кто-то может сказать, что сравнение имен файлов допустимо, но это не так. Это потерпит неудачу во многих ситуациях и не является разумным выбором. Даже если бы был разумный способ сделать это определение на стороне клиента (кросс-браузерный), нет никакого способа сообщить Fine Uploader, что дубликат файла существует.

Если вы хотите предотвратить отправку файла, вы можете сделать это, вернув значение false из ссылки "validate", или вы можете вернуть qq.Promise, который вы позже вызовете failure после того, как асинхронно определили, что файл должен быть отклонен. Асинхронная часть возникает, когда вы используете FileReader для вычисления хеша MD5 для клиентской части файла, а затем либо выполняете вызов ajax на свой сервер, чтобы определить, существует ли другой файл с совпадающим хешем, либо сравниваете его с другими хэшами, которые у вас есть. хранится на стороне клиента для файлов, отправленных во время текущего сеанса. Однако вычисление этого хэша может быть довольно дорогим.

person Ray Nicholus    schedule 06.10.2013

Вы хотите отобразить ранее загруженный элемент. Для этого нет ярлыка, но это легко, из onComplete FineUploader, вот некоторый код для того, как я отображаю фотографии, вы можете использовать его для отображения предыдущей фотографии.

   onComplete: function(id, fileName, responseJSON) {
                    if (responseJSON.success) {
                        $('#file-' + id).removeClass('alert-info')
                                        .addClass('alert-success')
                                        .html('<i class="glyphicon glyphicon-ok"></i> ' +
                                              'Successfully saved ' +
                                              '“' + fileName + '”' +
                                              '<br><img src="/images/message_ok.png" alt="' + fileName + '">');
                        $.when(loadThumbs()).done(function () {
                            $(".qq-upload-list > .alert-success").remove();
                        });
                        myprettyprompt.success("Success!");

   function loadThumbs() {

        var PhotoRequest = {
            propertyId: <%=PropertyId %>
            }
        var currentTime = new Date();
        var n = currentTime.getTime();
        postUrl = "myurl?nocache="+n; //use nocache, mobile safari IOS6 caches ajax urls!

        $.ajax(
        {
            url: postUrl,
            type: "POST",
            cache: false,
            data: JSON.stringify(PhotoRequest),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (data) {
                loadThumbsCallBack(data.d);
            }
        });

    }

    function loadThumbsCallBack(data) {
        var items = [];
        var photoTypeSelectList = 
            '<select class="form-control" data-id="{id}">' +   
            '<option value="Misc">Misc</option>' +    
            '</select>'
        var defaultCheckBox = '<label><small>First Photo (Default)</small></label><input type="checkbox" class="default-photo-cbx" data-id="{id}" {checked} />';
        var itemTemplate = '<li><img data-photo-type="{photo_type}" data-id="{id}" src="{url}" /><a class="glyphicon glyphicon-remove" href="#"></a><div>' + photoTypeSelectList + defaultCheckBox + '</div></li>';

        //clear current image thumbs
        $('#imageThumbs').empty();

        $.each(data, function (index, element) {
            var item;
            var checked = '';

            if(element.DefaultPhoto){
                checked = 'checked="checked"';
            }
            item = itemTemplate.replace(/{id}/g, element.Id).replace('{url}', element.Url).replace(/{photo_type}/g, element.PhotoType).replace('{checked}',checked);

            //mark photo type selected if photo type exists
            if (element.PhotoType !== null) {
                item = item.replace('value="' + element.PhotoType + '"', 'value="' + element.PhotoType + '" selected="selected"');
            }

            items.push(item);
        });


        $('#imageThumbs').append(items.join(''));


        $("#imageThumbs > li > a").click(function () {
            deleteThumb($(this).prev().attr('data-id'));
        });

        $("#imageThumbs > li > div >select").change(function () {
            updatePhotoType($(this).attr('data-id'), $(this).find('option:selected').text());
        });

        $("#imageThumbs > li > div > .default-photo-cbx").change(function () {
            var isChecked = $(this).is(':checked');

            //ignore if unchecking
            if(isChecked){
                UpdateDefaultPhoto($(this).attr('data-id'), $(this).is(':checked'));
            }
        });
    }

 <div id="bootstrapped-fine-uploader">
    </div>
    <div>
        <ul id="imageThumbs">
        </ul>
    </div>
    <div class="clearfix"></div>
person Brian Ogden    schedule 06.10.2013