Уведомление Неопределенный индекс: image [duplicate]

<html>
    <head>
        <title>HTML Document</title>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
    </head>

    <body>
        <div id="hover-id">
            Hello World
        </div>

        <script>
            jQuery(document).ready(function($){
                $(document).on('mouseover', '#hover-id', function(){
                    $(this).css('color','yellowgreen');
                });

                $(document).on('mouseout', '#hover-id', function(){
                    $(this).css('color','black');
                });
            });
        </script>
    </body>
</html>
630
задан Taryn 22 March 2017 в 17:25
поделиться

22 ответа

загрузка файла невозможна через ajax. Вы можете загрузить файл, не обновляя страницу с помощью IFrame. вы можете проверить дальнейшие подробности здесь

UPDATE:

С XHR2 поддерживается загрузка файлов через AJAX. Например. через объект FormData , но, к сожалению, он не поддерживается всеми / старыми браузерами.

Поддержка FormData запускается из следующих версий браузеров для настольных компьютеров. IE 10+, Firefox 4.0+, Chrome 7+, Safari 5+, Opera 12 +

Подробнее см. В ссылке MDN

522
ответ дан Adeel 18 August 2018 в 09:46
поделиться
  • 1
    Вот список конкретных браузеров, которые не поддерживаются: caniuse.com/#search=FormData Также я не тестировал это, но здесь есть полипол для FormData gist.github.com/ 3120320 – Ryan White 3 October 2012 в 01:34
  • 2
    В частности, IE & lt; 10 нет, для тех, кто слишком ленив, чтобы прочитать ссылку. – Kevin 1 November 2012 в 07:28
  • 3
    @Synexis нет, нам не нужно так долго ждать, потому что у всего IE всего 22% мирового рынка и 27% в США и быстро снижается. Скорее всего, люди старше 70 лет. Так что вместо того, чтобы IE диктовать, что разработчики должны делать IE, либо придется формировать, либо выйти из гонки. – Drew Calder 6 March 2014 в 10:49
  • 4
    @DrewCalder. Большинство пользователей IE - это офисные работники, у которых нет выбора, из которого браузер будет использоваться из-за политики компании. Я не думаю, что возраст имеет к этому много общего. Я предполагаю, что большинство людей & gt; 70 получить их потомство, чтобы установить Chrome или FF вместо этого :) – Nicolas Connault 18 June 2014 в 05:10
  • 5
    Эта ссылка действительно помогла мне понять минимальный минимум. Мне не нужно было использовать запрос xhr. Если вы используете ajax, обязательно установите для параметра enctype значение "form/multipart"! – Luminous 29 July 2015 в 20:54

Ajax не поддерживает загрузку файлов, вы должны использовать iframe вместо

1
ответ дан antyrat 18 August 2018 в 09:46
поделиться

Загрузка AJAX действительно возможна с помощью XMLHttpRequest (). Нет необходимости в iframe. Прогресс загрузки можно показать.

Подробнее см .: Ответ https://stackoverflow.com/a/4943774/873282 на вопрос jQuery Загрузка Прогресс и загрузка файла AJAX .

143
ответ дан Community 18 August 2018 в 09:46
поделиться
  • 1
    К сожалению, IE & lt; 10 не поддерживают это. – Sasha Chedygov 10 December 2012 в 23:02
  • 2
    В какой библиотеке jquery мне нужно ссылаться на запуск этого кода? – Rayden Black 16 December 2015 в 03:21
  • 3
    Ответ был написан в 2014 году. Версия JQuery была 1.10. Я не пробовал более поздние версии. – pedrozopayares 9 April 2016 в 19:51
  • 4
    formData.append('file', $('#file')[0].files[0]); возвращает undefined и console.log(formData) ничего, кроме _proto_ – Yakob Ubaidi 5 August 2016 в 09:52
  • 5
    Не поддерживается IE 9, если кто-то застрял в том же аду, что и я – CountMurphy 10 January 2017 в 16:40
  • 6
    Я получил это, чтобы работать ... Pinch меня, я на jQuery Ajax загрузки файлов небо! var formData = new FormData(); formData.append('file', document.getElementById('file').files[0]); $.ajax({ url : $("form[name='uploadPhoto']").attr("action"), type : 'POST', data : formData, processData: false, // tell jQuery not to process the data contentType: false, // tell jQuery not to set contentType success : function(data) { console.log(data); alert(data); } }); – TARKUS 30 January 2017 в 23:43

Я обработал их простым кодом. Вы можете скачать рабочую демонстрацию из здесь

. В вашем случае это очень возможно. Я сделаю шаг за шагом, как вы можете загрузить файл на сервер с помощью jQuery AJAX.

Сначала давайте создадим HTML-файл, чтобы добавить следующий элемент файла формы, как показано ниже.

<form action="" id="formContent" method="post" enctype="multipart/form-data" >
         <input  type="file" name="file"  required id="upload">
         <button class="submitI" >Upload Image</button> 
</form>

Во-вторых, создайте файл jquery.js и добавьте следующий код для обработки нашего подача файла на сервер

    $("#formContent").submit(function(e){
        e.preventDefault();

    var formdata = new FormData(this);

        $.ajax({
            url: "ajax_upload_image.php",
            type: "POST",
            data: formdata,
            mimeTypes:"multipart/form-data",
            contentType: false,
            cache: false,
            processData: false,
            success: function(){
                alert("file successfully submitted");
            },error: function(){
                alert("okey");
            }
         });
      });
    });

Там вы закончили. Показать еще

5
ответ дан Daniel Nyamasyo 18 August 2018 в 09:46
поделиться

Чтобы получить все ваши входы формы, в том числе type = "file" , вам нужно использовать объект FormData . вы сможете увидеть содержимое formData в отладчике -> network -> Headers после того, как вы отправите форму.

var url = "YOUR_URL";

var form = $('#YOUR_FORM_ID')[0];
var formData = new FormData(form);


$.ajax(url, {
    method: 'post',
    processData: false,
    contentType: false,
    data: formData
}).done(function(data){
    if (data.success){ 
        alert("Files uploaded");
    } else {
        alert("Error while uploading the files");
    }
}).fail(function(data){
    console.log(data);
    alert("Error while uploading the files");
});
2
ответ дан David 18 August 2018 в 09:46
поделиться

Вот идея, о которой я думал:

Have an iframe on page and have a referencer.

У вас есть форма, в которой вы перемещаете элемент INPUT: File.

Form:  A processing page AND a target of the FRAME.

Результат будет опубликован к кадру, а затем вы можете просто отправить полученные данные до уровня к тегу изображения, который вы хотите, с чем-то вроде:

data:image/png;base64,asdfasdfasdfasdfa

и загрузки страницы.

Я верю он работает для меня, и в зависимости от того, вы можете сделать что-то вроде:

.aftersubmit(function(){
    stopPropigation()// or some other code which would prevent a refresh.
});
0
ответ дан Fallenreaper 18 August 2018 в 09:46
поделиться
  • 1
    Я не вижу, как это улучшает любой другой ответ, который был дан ранее. Также это Распространение не пропитка! ;) – JDuarteDJ 14 August 2018 в 14:32
$("#submit_car").click( function() {
  var formData = new FormData($('#car_cost_form')[0]);
$.ajax({
       url: 'car_costs.php',
       data: formData,
       async: false,
       contentType: false,
       processData: false,
       cache: false,
       type: 'POST',
       success: function(data)
       {
       },
     })    return false;    
});

изменить: указать тип контента и данные процесса. Вы можете просто использовать это для загрузки файлов через Ajax ...... submit input не может быть элементом внешней формы:)

9
ответ дан Gvice 18 August 2018 в 09:46
поделиться
  • 1
    Используя этот метод, вы можете публиковать форму, но не с полями типа файла. Этот вопрос касается загрузки файлов. – Jomy John 9 October 2013 в 10:22

Я реализовал множественный выбор файла с мгновенным предварительным просмотром и загрузкой после удаления нежелательных файлов из предварительного просмотра через ajax.

Подробную документацию можно найти здесь: http://anasthecoder.blogspot.ae/2014/12/multi-file-select-preview-without.html

Демо: http://jsfiddle.net/anas/6v8Kz/7/embedded/result/

jsFiddle: http://jsfiddle.net/ anas / 6v8Kz / 7 /

Javascript:

    $(document).ready(function(){
    $('form').submit(function(ev){
        $('.overlay').show();
        $(window).scrollTop(0);
        return upload_images_selected(ev, ev.target);
    })
})
function add_new_file_uploader(addBtn) {
    var currentRow = $(addBtn).parent().parent();
    var newRow = $(currentRow).clone();
    $(newRow).find('.previewImage, .imagePreviewTable').hide();
    $(newRow).find('.removeButton').show();
    $(newRow).find('table.imagePreviewTable').find('tr').remove();
    $(newRow).find('input.multipleImageFileInput').val('');
    $(addBtn).parent().parent().parent().append(newRow);
}

function remove_file_uploader(removeBtn) {
    $(removeBtn).parent().parent().remove();
}

function show_image_preview(file_selector) {
    //files selected using current file selector
    var files = file_selector.files;
    //Container of image previews
    var imageContainer = $(file_selector).next('table.imagePreviewTable');
    //Number of images selected
    var number_of_images = files.length;
    //Build image preview row
    var imagePreviewRow = $('<tr class="imagePreviewRow_0"><td valign=top style="width: 510px;"></td>' +
        '<td valign=top><input type="button" value="X" title="Remove Image" class="removeImageButton" imageIndex="0" onclick="remove_selected_image(this)" /></td>' +
        '</tr> ');
    //Add image preview row
    $(imageContainer).html(imagePreviewRow);
    if (number_of_images > 1) {
        for (var i =1; i<number_of_images; i++) {
            /**
             *Generate class name of the respective image container appending index of selected images, 
             *sothat we can match images selected and the one which is previewed
             */
            var newImagePreviewRow = $(imagePreviewRow).clone().removeClass('imagePreviewRow_0').addClass('imagePreviewRow_'+i);
            $(newImagePreviewRow).find('input[type="button"]').attr('imageIndex', i);
            $(imageContainer).append(newImagePreviewRow);
        }
    }
    for (var i = 0; i < files.length; i++) {
        var file = files[i];
        /**
         * Allow only images
         */
        var imageType = /image.*/;
        if (!file.type.match(imageType)) {
          continue;
        }

        /**
         * Create an image dom object dynamically
         */
        var img = document.createElement("img");

        /**
         * Get preview area of the image
         */
        var preview = $(imageContainer).find('tr.imagePreviewRow_'+i).find('td:first');

        /**
         * Append preview of selected image to the corresponding container
         */
        preview.append(img); 

        /**
         * Set style of appended preview(Can be done via css also)
         */
        preview.find('img').addClass('previewImage').css({'max-width': '500px', 'max-height': '500px'});

        /**
         * Initialize file reader
         */
        var reader = new FileReader();
        /**
         * Onload event of file reader assign target image to the preview
         */
        reader.onload = (function(aImg) { return function(e) { aImg.src = e.target.result; }; })(img);
        /**
         * Initiate read
         */
        reader.readAsDataURL(file);
    }
    /**
     * Show preview
     */
    $(imageContainer).show();
}

function remove_selected_image(close_button)
{
    /**
     * Remove this image from preview
     */
    var imageIndex = $(close_button).attr('imageindex');
    $(close_button).parents('.imagePreviewRow_' + imageIndex).remove();
}

function upload_images_selected(event, formObj)
{
    event.preventDefault();
    //Get number of images
    var imageCount = $('.previewImage').length;
    //Get all multi select inputs
    var fileInputs = document.querySelectorAll('.multipleImageFileInput');
    //Url where the image is to be uploaded
    var url= "/upload-directory/";
    //Get number of inputs
    var number_of_inputs = $(fileInputs).length; 
    var inputCount = 0;

    //Iterate through each file selector input
    $(fileInputs).each(function(index, input){

        fileList = input.files;
        // Create a new FormData object.
        var formData = new FormData();
        //Extra parameters can be added to the form data object
        formData.append('bulk_upload', '1');
        formData.append('username', $('input[name="username"]').val());
        //Iterate throug each images selected by each file selector and find if the image is present in the preview
        for (var i = 0; i < fileList.length; i++) {
            if ($(input).next('.imagePreviewTable').find('.imagePreviewRow_'+i).length != 0) {
                var file = fileList[i];
                // Check the file type.
                if (!file.type.match('image.*')) {
                    continue;
                }
                // Add the file to the request.
                formData.append('image_uploader_multiple[' +(inputCount++)+ ']', file, file.name);
            }
        }
        // Set up the request.
        var xhr = new XMLHttpRequest();
        xhr.open('POST', url, true);
        xhr.onload = function () {
            if (xhr.status === 200) {
                var jsonResponse = JSON.parse(xhr.responseText);
                if (jsonResponse.status == 1) {
                    $(jsonResponse.file_info).each(function(){
                        //Iterate through response and find data corresponding to each file uploaded
                        var uploaded_file_name = this.original;
                        var saved_file_name = this.target;
                        var file_name_input = '<input type="hidden" class="image_name" name="image_names[]" value="' +saved_file_name+ '" />';
                        file_info_container.append(file_name_input);

                        imageCount--;
                    })
                    //Decrement count of inputs to find all images selected by all multi select are uploaded
                    number_of_inputs--;
                    if(number_of_inputs == 0) {
                        //All images selected by each file selector is uploaded
                        //Do necessary acteion post upload
                        $('.overlay').hide();
                    }
                } else {
                    if (typeof jsonResponse.error_field_name != 'undefined') {
                        //Do appropriate error action
                    } else {
                        alert(jsonResponse.message);
                    }
                    $('.overlay').hide();
                    event.preventDefault();
                    return false;
                }
            } else {
                /*alert('Something went wrong!');*/
                $('.overlay').hide();
                event.preventDefault();
            }
        };
        xhr.send(formData);
    })

    return false;
}
6
ответ дан Ima 18 August 2018 в 09:46
поделиться
  • 1
    @Bhargav: см. Сообщение в блоге для объяснений: goo.gl/umgFFy . Если у вас все еще есть какие-либо вопросы, вернитесь ко мне Спасибо – Ima 13 August 2015 в 06:26
                 var dataform = new FormData($("#myform")[0]);

                    //console.log(dataform);
                     $.ajax({
                        url: 'url',
                        type: 'POST',
                        data: dataform,
                        async: false,
                        success: function (res) {
                            response data;
                        },
                        cache: false,
                        contentType: false,
                        processData: false
                    });
1
ответ дан Jayesh Paunikar 18 August 2018 в 09:46
поделиться
  • 1
    вы можете улучшить свой ответ, добавив некоторые подробности – S.R 9 June 2017 в 11:08

Если вы хотите сделать это так:

$.upload( form.action, new FormData( myForm))
.progress( function( progressEvent, upload) {
    if( progressEvent.lengthComputable) {
        var percent = Math.round( progressEvent.loaded * 100 / progressEvent.total) + '%';
        if( upload) {
            console.log( percent + ' uploaded');
        } else {
            console.log( percent + ' downloaded');
        }
    }
})
.done( function() {
    console.log( 'Finished upload');                    
});

, чем

https://github.com/lgersman/jquery.orangevolt-ampere/ blob / master / src / jquery.upload.js

может быть вашим решением.

13
ответ дан lgersman 18 August 2018 в 09:46
поделиться
  • 1
    Где метод загрузки в объекте $, указанная выше ссылка не существует – coolesting 20 December 2012 в 05:41
  • 2
    [Д0] github.com/lgersman/jquery.orangevolt-ampere/blob/master/src/… – lgersman 4 January 2013 в 10:57
  • 3
    Благодарим за отправку ответа! Обязательно внимательно прочитайте FAQ по Self-Promotion . Также обратите внимание, что требуется , что вы публикуете отказ от ответственности каждый раз, когда вы ссылаетесь на свой собственный сайт / продукт. – Andrew Barber 8 April 2013 в 16:28

Простая форма загрузки

 <script>
   //form Submit
   $("form").submit(function(evt){	 
      evt.preventDefault();
      var formData = new FormData($(this)[0]);
   $.ajax({
       url: 'fileUpload',
       type: 'POST',
       data: formData,
       async: false,
       cache: false,
       contentType: false,
       enctype: 'multipart/form-data',
       processData: false,
       success: function (response) {
         alert(response);
       }
   });
   return false;
 });
</script>
<!--Upload Form-->
<form>
  <table>
    <tr>
      <td colspan="2">File Upload</td>
    </tr>
    <tr>
      <th>Select File </th>
      <td><input id="csv" name="csv" type="file" /></td>
    </tr>
    <tr>
      <td colspan="2">
        <input type="submit" value="submit"/> 
      </td>
    </tr>
  </table>
</form>

75
ответ дан Liam 18 August 2018 в 09:46
поделиться
  • 1
    sir, что js, которые были использованы в этом примере, есть конкретный плагин jquery для этого ... у меня есть вопрос, на который я был указан здесь, можете ли вы, пожалуйста, проверить мой вопрос .. Я хочу загрузить несколько файлов или изображений в этом проекте здесь ссылка stackoverflow.com/questions/28644200/… – Brownman Revival 24 February 2015 в 03:44
  • 2
    $ (this) [0] является этим – machineaddict 20 May 2016 в 09:07
  • 3
    Каков параметр на сервере для опубликованного файла? All all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all all – FrenkyB 27 October 2017 в 09:02
  • 4
    @FrenkyB и другие - файлы на сервере (в PHP) не хранятся в переменной $ _POST - они хранятся в переменной $ _FILES. В этом случае вы получите доступ к нему с помощью $ _FILES ["csv"], потому что "csv" является атрибутом имени входного тега. – dev_masta 29 April 2018 в 22:09
  • Используйте скрытый iframe и установите цель своей формы на это имя iframe. Таким образом, когда форма отправлена, будет обновлен только iframe.
  • У обработчика событий, зарегистрированного для события загрузки iframe, для синтаксического анализа ответа.

Подробнее подробности на моем блоге: http://blog.manki.in/2011/08/ajax-fie-upload.html .

12
ответ дан Manki 18 August 2018 в 09:46
поделиться

Использование FormData - это путь, о котором свидетельствуют многие ответы. вот немного кода, который отлично подходит для этой цели. Я также согласен с комментарием вложенных блоков ajax для завершения сложных обстоятельств. Включая e.PreventDefault (); по моему опыту делает код более совместимым с браузером.

    $('#UploadB1').click(function(e){        
    e.preventDefault();

    if (!fileupload.valid()) {
        return false;            
    }

    var myformData = new FormData();        
    myformData.append('file', $('#uploadFile')[0].files[0]);

    $("#UpdateMessage5").html("Uploading file ....");
    $("#UpdateMessage5").css("background","url(../include/images/loaderIcon.gif) no-repeat right");

    myformData.append('mode', 'fileUpload');
    myformData.append('myid', $('#myid').val());
    myformData.append('type', $('#fileType').val());
    //formData.append('myfile', file, file.name); 

    $.ajax({
        url: 'include/fetch.php',
        method: 'post',
        processData: false,
        contentType: false,
        cache: false,
        data: myformData,
        enctype: 'multipart/form-data',
        success: function(response){
            $("#UpdateMessage5").html(response); //.delay(2000).hide(1); 
            $("#UpdateMessage5").css("background","");

            console.log("file successfully submitted");
        },error: function(){
            console.log("not okay");
        }
    });
});
2
ответ дан Mike Volmar 18 August 2018 в 09:46
поделиться
  • 1
    это запускает форму через jquery validate ... if (! fileupload.valid ()) {return false; } – Mike Volmar 24 May 2018 в 01:57

Iframes больше не требуется для загрузки файлов через ajax. Я недавно сделал это сам. Проверьте эти страницы:

Использование загрузки файлов HTML5 с помощью AJAX и jQuery

http://dev.w3.org/2006/webapi / FileAPI / # FileReader-interface

Обновил ответ и очистил его. Используйте функцию getSize для проверки размера или использования функции getType для проверки типов. Добавлен progressbar html и код css.

var Upload = function (file) {
    this.file = file;
};

Upload.prototype.getType = function() {
    return this.file.type;
};
Upload.prototype.getSize = function() {
    return this.file.size;
};
Upload.prototype.getName = function() {
    return this.file.name;
};
Upload.prototype.doUpload = function () {
    var that = this;
    var formData = new FormData();

    // add assoc key values, this will be posts values
    formData.append("file", this.file, this.getName());
    formData.append("upload_file", true);

    $.ajax({
        type: "POST",
        url: "script",
        xhr: function () {
            var myXhr = $.ajaxSettings.xhr();
            if (myXhr.upload) {
                myXhr.upload.addEventListener('progress', that.progressHandling, false);
            }
            return myXhr;
        },
        success: function (data) {
            // your callback here
        },
        error: function (error) {
            // handle error
        },
        async: true,
        data: formData,
        cache: false,
        contentType: false,
        processData: false,
        timeout: 60000
    });
};

Upload.prototype.progressHandling = function (event) {
    var percent = 0;
    var position = event.loaded || event.position;
    var total = event.total;
    var progress_bar_id = "#progress-wrp";
    if (event.lengthComputable) {
        percent = Math.ceil(position / total * 100);
    }
    // update progressbars classes so it fits your code
    $(progress_bar_id + " .progress-bar").css("width", +percent + "%");
    $(progress_bar_id + " .status").text(percent + "%");
};

Как использовать класс загрузки

//Change id to your id
$("#ingredient_file").on("change", function (e) {
    var file = $(this)[0].files[0];
    var upload = new Upload(file);

    // maby check size or type here with upload.getSize() and upload.getType()

    // execute upload
    upload.doUpload();
});

Progressbar html code

<div id="progress-wrp">
    <div class="progress-bar"></div>
    <div class="status">0%</div>
</div>

Progressbar css code

#progress-wrp {
  border: 1px solid #0099CC;
  padding: 1px;
  position: relative;
  height: 30px;
  border-radius: 3px;
  margin: 10px;
  text-align: left;
  background: #fff;
  box-shadow: inset 1px 3px 6px rgba(0, 0, 0, 0.12);
}

#progress-wrp .progress-bar {
  height: 100%;
  border-radius: 3px;
  background-color: #f39ac7;
  width: 0;
  box-shadow: inset 1px 1px 10px rgba(0, 0, 0, 0.11);
}

#progress-wrp .status {
  top: 3px;
  left: 50%;
  position: absolute;
  display: inline-block;
  color: #000000;
}
259
ответ дан Mosh Feu 18 August 2018 в 09:46
поделиться
  • 1
    Вы можете более или менее скопировать код и использовать его. Просто измените имена и имена классов. Любая настройка выполняется самостоятельно. – Ziinloader 14 June 2012 в 13:49
  • 2
    Обратите внимание, что myXhr, похоже, является глобальным, а также именем, размером и типом. Также лучше использовать & quot; beforeSend & quot; для увеличения уже созданного объекта XMLHttpRequest, а не для использования "xhr" чтобы создать его, затем измените его. – awatts 10 August 2012 в 10:13
  • 3
    Не поддерживается IE9: caniuse.com/#search=xhr – C.M. 23 October 2012 в 20:05
  • 4
    Я не думаю, что мы можем использовать это как @Ziinloader. Вы используете локальный метод, который не включен: writer(catchFile). Что writer()? – tandrewnichols 21 May 2013 в 12:30
  • 5
    Что делать, если данные также содержат несколько полей вместе с файлом для загрузки? – raju 29 April 2014 в 19:33

Я довольно поздно для этого, но я искал решение для загрузки изображений на основе ajax, и ответ, который я искал, был разбросан по всему этому сообщению. Решение, на котором я остановился, включал объект FormData. Я собрал базовую форму кода, который я собрал вместе. Вы можете увидеть, как он показывает, как добавить настраиваемое поле в форму с помощью fd.append (), а также как обрабатывать данные ответа, когда выполняется запрос ajax.

Загрузить html:

<!DOCTYPE html>
<html>
<head>
    <title>Image Upload Form</title>
    <script src="//code.jquery.com/jquery-1.9.1.js"></script>
    <script type="text/javascript">
        function submitForm() {
            console.log("submit event");
            var fd = new FormData(document.getElementById("fileinfo"));
            fd.append("label", "WEBUPLOAD");
            $.ajax({
              url: "upload.php",
              type: "POST",
              data: fd,
              processData: false,  // tell jQuery not to process the data
              contentType: false   // tell jQuery not to set contentType
            }).done(function( data ) {
                console.log("PHP Output:");
                console.log( data );
            });
            return false;
        }
    </script>
</head>

<body>
    <form method="post" id="fileinfo" name="fileinfo" onsubmit="return submitForm();">
        <label>Select a file:</label><br>
        <input type="file" name="file" required />
        <input type="submit" value="Upload" />
    </form>
    <div id="output"></div>
</body>
</html>

В случае, если вы работаете с php, это способ обработки загрузки, включающий использование обоих настраиваемых полей, показанных в приведенном выше html.

Upload.php

<?php
if ($_POST["label"]) {
    $label = $_POST["label"];
}
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 200000)
&& in_array($extension, $allowedExts)) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
    } else {
        $filename = $label.$_FILES["file"]["name"];
        echo "Upload: " . $_FILES["file"]["name"] . "<br>";
        echo "Type: " . $_FILES["file"]["type"] . "<br>";
        echo "Size: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
        echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br>";

        if (file_exists("uploads/" . $filename)) {
            echo $filename . " already exists. ";
        } else {
            move_uploaded_file($_FILES["file"]["tmp_name"],
            "uploads/" . $filename);
            echo "Stored in: " . "uploads/" . $filename;
        }
    }
} else {
    echo "Invalid file";
}
?>
59
ответ дан Musa 18 August 2018 в 09:46
поделиться
  • 1
    Я получаю Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https,, почему это так, сэр, я скопирую ваш код, поскольку он – Brownman Revival 21 February 2015 в 12:07
  • 2
    @HogRider - если вы отправили свое сообщение об ошибке Google, это первый результат: stackoverflow.com/questions/10752055/… Доступны ли вы на своих веб-страницах локально через file://, а не через веб-сайт сервер? В стороне, это не лучшая практика, чтобы просто копировать и вставлять код вслепую, не понимая его впервые. Я бы порекомендовал вам пройти код по очереди, чтобы получить представление о том, что происходит, прежде чем использовать код. – colincameron 18 March 2015 в 14:12
  • 3
    @colincameron благодарю вас за разъяснение нескольких вещей, которые я сделал через линию, и я не очень понимаю многое, поэтому я задал вопрос, чтобы кто-то мог прояснить мои сомнения. Я использую локально по xampp, чтобы быть точным. Могу ли я задать вопрос, который, возможно, вы можете уточнить? – Brownman Revival 19 March 2015 в 02:45
  • 4
    @Brownman Revival: Я знаю, что слишком поздно для ответа. У вас возникла ошибка перекрестного происхождения, потому что вы открыли файл html в качестве файла, а не запускали его с сервера. – Adarsh Mohan 22 November 2015 в 13:20
  • 5
    @AdarshMohan Я ценю ответ, как вы предлагаете мне сделать это, чтобы сделать все правильно? – Brownman Revival 15 December 2015 в 04:13
<html>
    <head>
        <title>Ajax file upload</title>
        <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
        <script>
            $(document).ready(function (e) {
            $("#uploadimage").on('submit', (function(e) {
            e.preventDefault();
                    $.ajax({
                    url: "upload.php", // Url to which the request is send
                            type: "POST", // Type of request to be send, called as method
                            data: new FormData(this), // Data sent to server, a set of key/value pairs (i.e. form fields and values)
                            contentType: false, // The content type used when sending data to the server.
                            cache: false, // To unable request pages to be cached
                            processData:false, // To send DOMDocument or non processed data file it is set to false
                            success: function(data)   // A function to be called if request succeeds
                            {
                            alert(data);
                            }
                    });
            }));
        </script>
    </head>
    <body>
        <div class="main">
            <h1>Ajax Image Upload</h1><br/>
            <hr>
            <form id="uploadimage" action="" method="post" enctype="multipart/form-data">
                <div id="image_preview"><img id="previewing" src="noimage.png" /></div>
                <hr id="line">
                <div id="selectImage">
                    <label>Select Your Image</label><br/>
                    <input type="file" name="file" id="file" required />
                    <input type="submit" value="Upload" class="submit" />
                </div>
            </form>
        </div>
    </body>
</html>
1
ответ дан Nicomedes E. 18 August 2018 в 09:46
поделиться

Если вы хотите загрузить файл с помощью AJAX, вот код, который вы можете использовать для загрузки файла.

$(document).ready(function() {
    var options = { 
                beforeSubmit:  showRequest,
        success:       showResponse,
        dataType: 'json' 
        }; 
    $('body').delegate('#image','change', function(){
        $('#upload').ajaxForm(options).submit();        
    }); 
});     
function showRequest(formData, jqForm, options) { 
    $("#validation-errors").hide().empty();
    $("#output").css('display','none');
    return true; 
} 
function showResponse(response, statusText, xhr, $form)  { 
    if(response.success == false)
    {
        var arr = response.errors;
        $.each(arr, function(index, value)
        {
            if (value.length != 0)
            {
                $("#validation-errors").append('<div class="alert alert-error"><strong>'+ value +'</strong><div>');
            }
        });
        $("#validation-errors").show();
    } else {
         $("#output").html("<img src='"+response.file+"' />");
         $("#output").css('display','block');
    }
}

Вот HTML для загрузки файла

<form class="form-horizontal" id="upload" enctype="multipart/form-data" method="post" action="upload/image'" autocomplete="off">
    <input type="file" name="image" id="image" /> 
</form>
2
ответ дан Nikunj K. 18 August 2018 в 09:46
поделиться

Да, вы можете просто использовать javascript для получения файла, убедившись, что вы читаете файл как URL-адрес данных. Разберите материал до base64, чтобы получить базовые 64 кодированные данные, а затем, если вы используете php или действительно какой-либо задний язык, вы можете декодировать базовые данные 64 и сохранять в файл, как показано ниже

Javascript:
var reader = new FileReader();
reader.onloadend = function ()
{
  dataToBeSent = reader.result.split("base64,")[1];
  $.post(url, {data:dataToBeSent});
}
reader.readAsDataURL(this.files[0]);


PHP:
    file_put_contents('my.pdf', base64_decode($_POST["data"]));

Конечно, вы, вероятно, захотите сделать некоторую проверку, например, проверить тип файла, с которым имеете дело, и все такое, но это идея.

4
ответ дан Piacenti 18 August 2018 в 09:46
поделиться
  • 1
    file_put_contents ($ fname, file_get_contents ($ _ POST ['data'])); file_get_contents имеет дело с расшифровкой и заголовком data: // – Nande 21 May 2016 в 03:49

Вы можете использовать метод ajaxSubmit следующим образом :), когда вы выбираете файл, который нужно загрузить на сервер, форма должна быть отправлена ​​на сервер:)

$(document).ready(function () {
    var options = {
    target: '#output',   // target element(s) to be updated with server response
    timeout: 30000,
    error: function (jqXHR, textStatus) {
            $('#output').html('have any error');
            return false;
        }
    },
    success: afterSuccess,  // post-submit callback
    resetForm: true
            // reset the form after successful submit
};

$('#idOfInputFile').on('change', function () {
    $('#idOfForm').ajaxSubmit(options);
    // always return false to prevent standard browser submit and page navigation
    return false;
});
});
3
ответ дан Quy Le 18 August 2018 в 09:46
поделиться
  • 1
    Я считаю, что вы говорите о плагине jQuery form . Это действительно лучший вариант здесь, помимо отсутствия деталей в вашем ответе. – fotanus 4 July 2014 в 18:56
  • 2
    @fotanus, ты прав! этот скрипт должен использовать плагин jquery form для отправки метода использования ajaxSubmit, который определяет в плагине форму jquery – Quy Le 13 July 2014 в 07:04

, чтобы загрузить файл, который отправляется пользователем как часть формы с помощью jquery, пожалуйста, следуйте приведенному ниже коду:

var formData = new FormData();
formData.append("userfile", fileInputElement.files[0]);

Затем отправьте объект данных формы на сервер.

Мы также можем добавить файл или Blob непосредственно к объекту FormData.

data.append("myfile", myBlob, "filename.txt");
3
ответ дан VISHNU Radhakrishnan 18 August 2018 в 09:46
поделиться
143
ответ дан Community 6 September 2018 в 22:21
поделиться
151
ответ дан Community 30 October 2018 в 03:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: