Чи може хтось пояснити, як реалізувати плагін jQuery File Upload?


116

EDIT (жовтень 2019):

Через 6 років і завантаження файлів jQuery явно все ще призводить до божевілля. Якщо ви знайдете трохи розради у відповідях тут, спробуйте знайти NPM для сучасної альтернативи. Не варто зайвих клопотів, обіцяю.

Я рекомендував Uploadify у попередньому редагуванні, але, як зазначив коментатор, вони більше не пропонують безкоштовну версію. У Uploadify так було у 2013 році.


Редагувати:

Здається, це все ще отримує трафік, тому я поясню, що я закінчив. Зрештою, плагін працював, дотримуючись підручника у прийнятій відповіді. Однак завантаження файлів jQuery - це справжній клопот, і якщо ви шукаєте простіший плагін для завантаження файлів, я б дуже рекомендував Uploadify . Як зазначено у відповіді, він безкоштовний лише для некомерційного використання.


Фон

Я намагаюся використовувати blueimp - х JQuery File Upload , щоб дозволити користувачам завантажувати файли. З коробки він працює чудово , дотримуючись інструкцій із налаштування. Але для того, щоб використовувати його практично на своєму веб-сайті, я хочу вміти робити кілька речей:

  • Включити завантажувача на будь-яку з моїх існуючих сторінок
  • Змініть каталог завантажених файлів

Усі файли для плагіна знаходяться у папці під коренем.

Я спробував ...

  • Переміщення демонстраційної сторінки в корінь та оновлення шляхів для необхідних сценаріїв
  • Зміна параметрів "upload_dir" та "upload_url" у файлі UploadHandler.php, як тут запропоновано .
  • Зміна URL-адреси у другому рядку демонстраційного JavaScript

У всіх випадках, попередній перегляд показує, а бар працює прогрес, але файли не завантажувати, і я отримую цю помилку в консолі: Uncaught TypeError: Cannot read property 'files' of undefined. Я не розумію, як працюють всі частини плагіна, що ускладнює налагодження.

Код

Javascript на демонстраційній сторінці:

$(function () {
'use strict';
// Change this to the location of your server-side upload handler:
var url = 'file_upload/server/php/UploadHandler.php',
    uploadButton = $('<button/>')
        .addClass('btn')
        .prop('disabled', true)
        .text('Processing...')
        .on('click', function () {
            var $this = $(this),
                data = $this.data();
            $this
                .off('click')
                .text('Abort')
                .on('click', function () {
                    $this.remove();
                    data.abort();
                });
            data.submit().always(function () {
                $this.remove();
            });
        });
$('#fileupload').fileupload({
    url: url,
    dataType: 'json',
    autoUpload: false,
    acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
    maxFileSize: 5000000, // 5 MB
    // Enable image resizing, except for Android and Opera,
    // which actually support image resizing, but fail to
    // send Blob objects via XHR requests:
    disableImageResize: /Android(?!.*Chrome)|Opera/
        .test(window.navigator.userAgent),
    previewMaxWidth: 100,
    previewMaxHeight: 100,
    previewCrop: true
}).on('fileuploadadd', function (e, data) {
    data.context = $('<div/>').appendTo('#files');
    $.each(data.files, function (index, file) {
        var node = $('<p/>')
                .append($('<span/>').text(file.name));
        if (!index) {
            node
                .append('<br>')
                .append(uploadButton.clone(true).data(data));
        }
        node.appendTo(data.context);
    });
}).on('fileuploadprocessalways', function (e, data) {
    var index = data.index,
        file = data.files[index],
        node = $(data.context.children()[index]);
    if (file.preview) {
        node
            .prepend('<br>')
            .prepend(file.preview);
    }
    if (file.error) {
        node
            .append('<br>')
            .append(file.error);
    }
    if (index + 1 === data.files.length) {
        data.context.find('button')
            .text('Upload')
            .prop('disabled', !!data.files.error);
    }
}).on('fileuploadprogressall', function (e, data) {
    var progress = parseInt(data.loaded / data.total * 100, 10);
    $('#progress .bar').css(
        'width',
        progress + '%'
    );
}).on('fileuploaddone', function (e, data) {
    $.each(data.result.files, function (index, file) {
        var link = $('<a>')
            .attr('target', '_blank')
            .prop('href', file.url);
        $(data.context.children()[index])
            .wrap(link);
    });
}).on('fileuploadfail', function (e, data) {
    $.each(data.result.files, function (index, file) {
        var error = $('<span/>').text(file.error);
        $(data.context.children()[index])
            .append('<br>')
            .append(error);
    });
}).prop('disabled', !$.support.fileInput)
    .parent().addClass($.support.fileInput ? undefined : 'disabled');
});


Мене дивує відсутність документації; здається, що слід змінити просту річ. Буду вдячний, якби хтось міг пояснити, як це зробити.


10
Хороший формат запитань. Приємно бачити організацію.
jdero

надрукуйте "e" та "data" в консолі безпосередньо перед рядком помилки, які значення?
John 4d5

3
Uploadi FY вимагає ліцензії MIT , наприклад , це абсолютно безкоштовно. Однак, Uploadi Five з того ж розробника / веб-сайту коштує $ 5- 100 в залежності від використання
MartinJH

2
За два роки документація jQuery-File-Upload не покращилася. Арг.
Чак Ле Бут

1
@MartinJH в якийсь момент може бути завантаження, але на сьогоднішній день існує лише одна - платна версія uploadiFive. І демо також немає; це лише відео. Погана форма.
Стів Хорват

Відповіді:


72

Я шукав подібну функціональність кілька днів тому і натрапив на хороший підручник з tutorialzine. Ось робочий приклад. Повний підручник можна знайти тут .

Проста форма для проведення діалогу завантаження файлів:

<form id="upload" method="post" action="upload.php" enctype="multipart/form-data">
  <input type="file" name="uploadctl" multiple />
  <ul id="fileList">
    <!-- The file list will be shown here -->
  </ul>
</form>

А ось код jQuery для завантаження файлів:

$('#upload').fileupload({

  // This function is called when a file is added to the queue
  add: function (e, data) {
    //This area will contain file list and progress information.
    var tpl = $('<li class="working">'+
                '<input type="text" value="0" data-width="48" data-height="48" data-fgColor="#0788a5" data-readOnly="1" data-bgColor="#3e4043" />'+
                '<p></p><span></span></li>' );

    // Append the file name and file size
    tpl.find('p').text(data.files[0].name)
                 .append('<i>' + formatFileSize(data.files[0].size) + '</i>');

    // Add the HTML to the UL element
    data.context = tpl.appendTo(ul);

    // Initialize the knob plugin. This part can be ignored, if you are showing progress in some other way.
    tpl.find('input').knob();

    // Listen for clicks on the cancel icon
    tpl.find('span').click(function(){
      if(tpl.hasClass('working')){
              jqXHR.abort();
      }
      tpl.fadeOut(function(){
              tpl.remove();
      });
    });

    // Automatically upload the file once it is added to the queue
    var jqXHR = data.submit();
  },
  progress: function(e, data){

        // Calculate the completion percentage of the upload
        var progress = parseInt(data.loaded / data.total * 100, 10);

        // Update the hidden input field and trigger a change
        // so that the jQuery knob plugin knows to update the dial
        data.context.find('input').val(progress).change();

        if(progress == 100){
            data.context.removeClass('working');
        }
    }
});
//Helper function for calculation of progress
function formatFileSize(bytes) {
    if (typeof bytes !== 'number') {
        return '';
    }

    if (bytes >= 1000000000) {
        return (bytes / 1000000000).toFixed(2) + ' GB';
    }

    if (bytes >= 1000000) {
        return (bytes / 1000000).toFixed(2) + ' MB';
    }
    return (bytes / 1000).toFixed(2) + ' KB';
}

А ось зразок коду PHP для обробки даних:

if($_POST) {
    $allowed = array('jpg', 'jpeg');

    if(isset($_FILES['uploadctl']) && $_FILES['uploadctl']['error'] == 0){

        $extension = pathinfo($_FILES['uploadctl']['name'], PATHINFO_EXTENSION);

        if(!in_array(strtolower($extension), $allowed)){
            echo '{"status":"error"}';
            exit;
        }

        if(move_uploaded_file($_FILES['uploadctl']['tmp_name'], "/yourpath/." . $extension)){
            echo '{"status":"success"}';
            exit;
        }
        echo '{"status":"error"}';
    }
    exit();
}

Вищевказаний код можна додати до будь-якої існуючої форми. Ця програма автоматично завантажує зображення, як тільки вони додаються. Цю функціональність можна змінити, і ви можете надіслати зображення, поки ви надсилаєте наявну форму.

Оновили свою відповідь фактичним кодом. Усі кредити оригінальному автору коду.

Джерело: http://tutorialzine.com/2013/05/mini-ajax-file-upload-form/


2
Чи можете ви скопіювати тут важливі частини цього підручника, тож якщо він зникне, ваша відповідь все ж корисна?

1
але будьте обережні, щоб не
пограбувати

1
УВАГА. Усі, хто використовує фрагмент коду PHP, видаляють if($_POST) оператор. POST повинен бути порожнім, в який надсилається вміст файлу $_FILES['upfile']['tmp_name']. Сподіваємось, це економить когось деякий час.
Едвард

1
Знайдено ще одного c-sharpcorner.com/UploadFile/da55bf/…
Rush.2707

хтось може підказати мені, які файли js / jquery потрібні для запуску вищезазначеного сценарію
Manasa

28

Я щойно провів 2 години, бореться з завантаженням jQuery, але відмовився через кількість залежностей (у мене було включено 13 файлів JS, щоб отримати всі дзвіночки).

Я трохи більше шукав і натрапив на акуратний проект під назвою Dropzone.js , який не має ніяких залежностей.

Автор також створив демо-версію для завантаження, яку надихнув плагін jQuery File Upload.

Сподіваюся, це заощадить когось іншого певний час.


1
Важливо відзначити: Dropzone.js виглядає добре, але він підтримує лише IE10 та новіші версії.
Підтримка

11
Завантаження файлів jQuery просто неможливо змусити його працювати ... Я відправляв багато годин, намагаючись, тому що він має дуже приємні риси, але в останню хвилину мою душу лише наповнила агонія !!! Який розлад !!! Потім я побачив твій пост про Dropzone.js і за 5 хвилин я змусив його працювати і так, як я хотів! Ти врятував мене ...
рігон

Не можу подякувати вам, я витратив майже 12 годин на те, щоб jQuery-FIle-Upload працював так, як я хочу, і нарешті я натрапив на це питання. Ти врятував мене.
NDD

ось приклад завантаження файлів jquery з бази даних: github.com/CodeHeight/ImageLibrary
JoshYates1980

Я витратив 3 дні, але все ще не можу
травня Погода VN

4

Я також боровся з цим, але змусив його працювати, як тільки я зрозумів, як працюють шляхи в UploadHandler.php: upload_dir і upload_url - це єдині параметри, на які слід звернути увагу, щоб його працювати. Також перевірте журнали помилок вашого сервера на наявність інформації про налагодження.


3

Ознайомтесь із завантажувачем зображень перетягування зображень із попереднім попереднім переглядом зображень, використовуючи плагін jquery для крапельниці.

HTML

<div class="target" width="78" height="100"><img /></div>

JS

$(".target").dropper({
    action: "upload.php",

}).on("start.dropper", onStart);
function onStart(e, files){
console.log(files[0]);

    image_preview(files[0].file).then(function(res){
$('.dropper-dropzone').empty();
//$('.dropper-dropzone').css("background-image",res.data);
 $('#imgPreview').remove();        
$('.dropper-dropzone').append('<img id="imgPreview"/><span style="display:none">Drag and drop files or click to select</span>');
var widthImg=$('.dropper-dropzone').attr('width');
        $('#imgPreview').attr({width:widthImg});
    $('#imgPreview').attr({src:res.data});

    })

}

function image_preview(file){
    var def = new $.Deferred();
    var imgURL = '';
    if (file.type.match('image.*')) {
        //create object url support
        var URL = window.URL || window.webkitURL;
        if (URL !== undefined) {
            imgURL = URL.createObjectURL(file);
            URL.revokeObjectURL(file);
            def.resolve({status: 200, message: 'OK', data:imgURL, error: {}});
        }
        //file reader support
        else if(window.File && window.FileReader)
        {
            var reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onloadend = function () {
                imgURL = reader.result;
                def.resolve({status: 200, message: 'OK', data:imgURL, error: {}});
            }
        }
        else {
            def.reject({status: 1001, message: 'File uploader not supported', data:imgURL, error: {}});
        }
    }
    else
        def.reject({status: 1002, message: 'File type not supported', error: {}});
    return def.promise();
}

$('.dropper-dropzone').mouseenter(function() {
 $( '.dropper-dropzone>span' ).css("display", "block");
});

$('.dropper-dropzone').mouseleave(function() {
 $( '.dropper-dropzone>span' ).css("display", "none");
});

CSS

.dropper-dropzone{
    width:78px;
padding:3px;
    height:100px;
position: relative;
}
.dropper-dropzone>img{
    width:78px;
    height:100px;
margin-top=0;
}

.dropper-dropzone>span {
    position: absolute;
    right: 10px;
    top: 20px;
color:#ccc;


}

.dropper .dropper-dropzone{

padding:3px !important    
}

Демо Jsfiddle


Це надзвичайно просте рішення.
Мирон

2

Це хороший кутовий плагін для завантаження файлів, і його безкоштовно!

кутове завантаження файлу


2
Привіт. Будь ласка, не публікуйте посилання як відповіді, якщо сайт перейде в офлайн або посилання зміниться, ваша відповідь стане марною. Натомість використовуйте інформацію на сайті, щоб скласти свою відповідь і використовувати посилання лише як довідку. Дякую.
Cthulhu

1

Я деякий час боровся з цим плагіном на Rails, а потім хтось заробив його застарілим усім створеним мною кодом.

Хоча це схоже, що ви не використовуєте це в Rails, проте якщо хтось використовує його, замовте цей дорогоцінний камінь . Джерело тут -> jQueryFileUpload Rails .

Оновлення:

Щоб задовольнити коментатора, я оновив свою відповідь. По суті " використовуйте цей дорогоцінний камінь , ось вихідний код " Якщо він зникає, то зробіть це довгим шляхом.



1

Droply.js ідеально підходить для цього. Це просто і постачається заздалегідь упакованим з демонстраційним сайтом, який працює поза коробкою.


0

Ви можете використовувати uploadify це найкращий плагін для завантаження jquery, який я використовував.

Реалізація проста, підтримка браузера ідеальна.


7
потрібен спалах ... :(
Єва,

2
Ви можете використовувати версію HTML 5 :)
CORSAIR

5
Якщо я не помиляюся, версія завантаження html5 не безкоштовна. Коштує 5 доларів. uploadify.com/download
0112

2
Але це лише 5 $, а не 500.
CORSAIR

7
Майте на увазі, якщо ви хочете використовувати uploadify для комерційних цілей, вам потрібно придбати комерційну ліцензію ($ 100) uploadify.com/download/download-uploadifive-commerce
Тім

0

Для плагіну інтерфейсу користувача зі сторінкою jsp та Spring MVC ..

Зразок html . Потрібно містити елемент форми з атрибутом id завантаження файлів

    <!-- The fileupload-buttonbar contains buttons to add/delete files and start/cancel the upload -->
<div class="fileupload-buttonbar">
    <div>
        <!-- The fileinput-button span is used to style the file input field as button -->
        <span class="btn btn-success fileinput-button">
            <i class="glyphicon glyphicon-plus"></i>
            <span>Add files</span>
            <input id="fileuploadInput" type="file" name="files[]" multiple>
        </span>
        <%-- https://stackoverflow.com/questions/925334/how-is-the-default-submit-button-on-an-html-form-determined --%>
        <button type="button" class="btn btn-primary start">
            <i class="glyphicon glyphicon-upload"></i>
            <span>Start upload</span>
        </button>
        <button type="reset" class="btn btn-warning cancel">
            <i class="glyphicon glyphicon-ban-circle"></i>
            <span>Cancel upload</span>
        </button>
        <!-- The global file processing state -->
        <span class="fileupload-process"></span>
    </div>
    <!-- The global progress state -->
    <div class="fileupload-progress fade">
        <!-- The global progress bar -->
        <div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100">
            <div class="progress-bar progress-bar-success" style="width:0%;"></div>
        </div>
        <!-- The extended global progress state -->
        <div class="progress-extended">&nbsp;</div>
    </div>
</div>
<!-- The table listing the files available for upload/download -->
<table role="presentation" class="table table-striped"><tbody class="files"></tbody></table>

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/css/jquery.fileupload.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/css/jquery.fileupload-ui.css">

<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/vendor/jquery.ui.widget.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.iframe-transport.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload-process.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload-validate.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/js/jquery-file-upload-9.14.2/js/jquery.fileupload-ui.js"></script>

<script type="text/javascript">
    $(document).ready(function () {
            var maxFileSizeBytes = ${maxFileSizeBytes};
        if (maxFileSizeBytes < 0) {
            //-1 or any negative value means no size limit
            //set to undefined
            ///programming/5795936/how-to-set-a-javascript-var-as-undefined
            maxFileSizeBytes = void 0;
        }

        //https://github.com/blueimp/jQuery-File-Upload/wiki/Options
        ///programming/34063348/jquery-file-upload-basic-plus-ui-and-i18n
        ///programming/11337897/how-to-customize-upload-download-template-of-blueimp-jquery-file-upload
        $('#fileupload').fileupload({
            url: '${pageContext.request.contextPath}/app/uploadResources.do',
            fileInput: $('#fileuploadInput'),
            acceptFileTypes: /(\.|\/)(jrxml|png|jpe?g)$/i,
            maxFileSize: maxFileSizeBytes,
            messages: {
                acceptFileTypes: '${fileTypeNotAllowedText}',
                maxFileSize: '${fileTooLargeMBText}'
            },
            filesContainer: $('.files'),
            uploadTemplateId: null,
            downloadTemplateId: null,
            uploadTemplate: function (o) {
                var rows = $();
                $.each(o.files, function (index, file) {
                    var row = $('<tr class="template-upload fade">' +
                            '<td><p class="name"></p>' +
                            '<strong class="error text-danger"></strong>' +
                            '</td>' +
                            '<td><p class="size"></p>' +
                            '<div class="progress progress-striped active" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' +
                            '<div class="progress-bar progress-bar-success" style="width:0%;"></div></div>' +
                            '</td>' +
                            '<td>' +
                            (!index && !o.options.autoUpload ?
                                    '<button class="btn btn-primary start" disabled>' +
                                    '<i class="glyphicon glyphicon-upload"></i> ' +
                                    '<span>${startText}</span>' +
                                    '</button>' : '') +
                            (!index ? '<button class="btn btn-warning cancel">' +
                                    '<i class="glyphicon glyphicon-ban-circle"></i> ' +
                                    '<span>${cancelText}</span>' +
                                    '</button>' : '') +
                            '</td>' +
                            '</tr>');
                    row.find('.name').text(file.name);
                    row.find('.size').text(o.formatFileSize(file.size));
                    if (file.error) {
                        row.find('.error').text(file.error);
                    }
                    rows = rows.add(row);
                });
                return rows;
            },
            downloadTemplate: function (o) {
                var rows = $();
                $.each(o.files, function (index, file) {
                    var row = $('<tr class="template-download fade">' +
                            '<td><p class="name"></p>' +
                            (file.error ? '<strong class="error text-danger"></strong>' : '') +
                            '</td>' +
                            '<td><span class="size"></span></td>' +
                            '<td>' +
                            (file.deleteUrl ? '<button class="btn btn-danger delete">' +
                                    '<i class="glyphicon glyphicon-trash"></i> ' +
                                    '<span>${deleteText}</span>' +
                                    '</button>' : '') +
                            '<button class="btn btn-warning cancel">' +
                            '<i class="glyphicon glyphicon-ban-circle"></i> ' +
                            '<span>${clearText}</span>' +
                            '</button>' +
                            '</td>' +
                            '</tr>');
                    row.find('.name').text(file.name);
                    row.find('.size').text(o.formatFileSize(file.size));
                    if (file.error) {
                        row.find('.error').text(file.error);
                    }
                    if (file.deleteUrl) {
                        row.find('button.delete')
                                .attr('data-type', file.deleteType)
                                .attr('data-url', file.deleteUrl);
                    }
                    rows = rows.add(row);
                });
                return rows;
            }
        });

    });
</script>

Зразок завантаження та видалення обробників запитів

    @PostMapping("/app/uploadResources")
public @ResponseBody
Map<String, List<FileUploadResponse>> uploadResources(MultipartHttpServletRequest request,
        Locale locale) {
    //https://github.com/jdmr/fileUpload/blob/master/src/main/java/org/davidmendoza/fileUpload/web/ImageController.java
    //https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#using-jquery-file-upload-ui-version-with-a-custom-server-side-upload-handler
    Map<String, List<FileUploadResponse>> response = new HashMap<>();
    List<FileUploadResponse> fileList = new ArrayList<>();

    String deleteUrlBase = request.getContextPath() + "/app/deleteResources.do?filename=";

    //http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/multipart/MultipartRequest.html
    Iterator<String> itr = request.getFileNames();
    while (itr.hasNext()) {
        String htmlParamName = itr.next();
        MultipartFile file = request.getFile(htmlParamName);
        FileUploadResponse fileDetails = new FileUploadResponse();
        String filename = file.getOriginalFilename();
        fileDetails.setName(filename);
        fileDetails.setSize(file.getSize());
        try {
            String message = saveFile(file);
            if (message != null) {
                String errorMessage = messageSource.getMessage(message, null, locale);
                fileDetails.setError(errorMessage);
            } else {
                //save successful
                String encodedFilename = URLEncoder.encode(filename, "UTF-8");
                String deleteUrl = deleteUrlBase + encodedFilename;
                fileDetails.setDeleteUrl(deleteUrl);
            }
        } catch (IOException ex) {
            logger.error("Error", ex);
            fileDetails.setError(ex.getMessage());
        }

        fileList.add(fileDetails);
    }

    response.put("files", fileList);

    return response;
}

@PostMapping("/app/deleteResources")
public @ResponseBody
Map<String, List<Map<String, Boolean>>> deleteResources(@RequestParam("filename") List<String> filenames) {
    Map<String, List<Map<String, Boolean>>> response = new HashMap<>();
    List<Map<String, Boolean>> fileList = new ArrayList<>();

    String templatesPath = Config.getTemplatesPath();
    for (String filename : filenames) {
        Map<String, Boolean> fileDetails = new HashMap<>();

        String cleanFilename = ArtUtils.cleanFileName(filename);
        String filePath = templatesPath + cleanFilename;

        File file = new File(filePath);
        boolean deleted = file.delete();

        if (deleted) {
            fileDetails.put(cleanFilename, true);
        } else {
            fileDetails.put(cleanFilename, false);
        }

        fileList.add(fileDetails);
    }

    response.put("files", fileList);

    return response;
}

Клас вибірки для генерації потрібної відповіді json

    public class FileUploadResponse {
    //https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#using-jquery-file-upload-ui-version-with-a-custom-server-side-upload-handler

    private String name;
    private long size;
    private String error;
    private String deleteType = "POST";
    private String deleteUrl;

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the size
     */
    public long getSize() {
        return size;
    }

    /**
     * @param size the size to set
     */
    public void setSize(long size) {
        this.size = size;
    }

    /**
     * @return the error
     */
    public String getError() {
        return error;
    }

    /**
     * @param error the error to set
     */
    public void setError(String error) {
        this.error = error;
    }

    /**
     * @return the deleteType
     */
    public String getDeleteType() {
        return deleteType;
    }

    /**
     * @param deleteType the deleteType to set
     */
    public void setDeleteType(String deleteType) {
        this.deleteType = deleteType;
    }

    /**
     * @return the deleteUrl
     */
    public String getDeleteUrl() {
        return deleteUrl;
    }

    /**
     * @param deleteUrl the deleteUrl to set
     */
    public void setDeleteUrl(String deleteUrl) {
        this.deleteUrl = deleteUrl;
    }

}

Дивіться https://pitipata.blogspot.co.ke/2017/01/using-jquery-file-upload-ui.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.