首页 文章

jQuery Ajax文件上传

提问于
浏览
645

我可以使用以下jQuery代码使用Ajax请求的post方法执行文件上载吗?

$.ajax({
    type: "POST",
    timeout: 50000,
    url: url,
    data: dataString,
    success: function (data) {
        alert('success');
        return false;
    }
});

如果可能,我是否需要填写“数据”部分?这是正确的方法吗?我只将文件发布到服务器端 .

我一直在谷歌搜索,但我发现是一个插件,而在我的计划中,我不想使用它 . 至少目前 .

20 回答

  • 10
    <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>
    <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>
    <input type="file" name="file" id="file" required /> <input type="submit" value="Upload" class="submit" /> </div> </form> </div> </body> </html>
  • 160

    使用XMLHttpRequest()确实可以上传AJAX . 没有必要的iframe . 可以显示上传进度 .

    有关详细信息,请参阅:回答https://stackoverflow.com/a/4943774/873282以回答jQuery Upload Progress and AJAX file upload .

  • 30

    如果你想这样做:

    $.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

    可能是你的解决方案 .

  • 3

    通过ajax无法上传文件 . 您可以使用IFrame上传文件,而无需刷新页面 . 你可以查看更多细节here

    UPDATE:

    使用XHR2,支持通过AJAX上传文件 . 例如 . 通过FormData对象,但不幸的是,所有/旧浏览器都不支持它 .

    FormData支持从以下桌面浏览器版本开始 . IE 10,Firefox 4.0,Chrome 7,Safari 5,Opera 12

    有关更多详细信息,请参阅MDN link

  • 268

    要获取所有表单输入,包括type = "file",您需要使用 FormData object . 在提交表单后,您将能够在调试器 - > network - > Headers中看到formData内容 .

    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");
    });
    
  • 12

    通过ajax上传文件不再需要iframe . 我最近自己做了 . 看看这些页面:

    Using HTML5 file uploads with AJAX and jQuery

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

    更新了答案并将其清理干净 . 使用getSize函数检查大小或使用getType函数检查类型 . 添加了进度条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 + "%");
    };
    

    如何使用Upload类

    //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代码

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

    Progressbar css代码

    #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;
    }
    
  • 61

    如果你想使用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>
    
  • 0
    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
    });
    
  • 540

    我已经很晚了,但我正在寻找一个基于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";
    }
    ?>
    
  • 13

    我用简单的代码处理了这些 . 您可以从here下载工作演示

    对于您的情况,这些非常可能 . 我将逐步介绍如何使用AJAX jquery将文件上传到服务器 .

    首先让我们创建一个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");
                }
             });
          });
        });
    

    你完成了 . View more

  • 5

    简单上传表格

    <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>
    
  • 6

    我通过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;
    }
    
  • 4

    使用jquery上传用户作为表单一部分提交的文件,请按照以下代码:

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

    然后将表单数据对象发送到服务器 .

    我们还可以将File或Blob直接附加到FormData对象 .

    data.append("myfile", myBlob, "filename.txt");
    
  • 2

    可以使用Ajax发布和上传文件 . 我正在使用 jQuery $.ajax 函数来加载我的文件 . 我试图使用XHR对象,但无法在服务器端使用PHP获得结果 .

    var formData = new FormData();
    formData.append('file', $('#file')[0].files[0]);
    
    $.ajax({
           url : 'upload.php',
           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);
           }
    });
    

    如您所见,您必须创建一个FormData对象,空或从(序列化? - $('#yourForm').serialize()) 现有表单,然后附加输入文件 .

    以下是更多信息: - How to upload a file using jQuery.ajax and FormData - Uploading files via jQuery, object FormData is provided and no file name, GET request

    对于PHP过程,您可以使用以下内容:

    //print_r($_FILES);
    $fileName = $_FILES['file']['name'];
    $fileType = $_FILES['file']['type'];
    $fileError = $_FILES['file']['error'];
    $fileContent = file_get_contents($_FILES['file']['tmp_name']);
    
    if($fileError == UPLOAD_ERR_OK){
       //Processes your file here
    }else{
       switch($fileError){
         case UPLOAD_ERR_INI_SIZE:   
              $message = 'Error al intentar subir un archivo que excede el tamaño permitido.';
              break;
         case UPLOAD_ERR_FORM_SIZE:  
              $message = 'Error al intentar subir un archivo que excede el tamaño permitido.';
              break;
         case UPLOAD_ERR_PARTIAL:    
              $message = 'Error: no terminó la acción de subir el archivo.';
              break;
         case UPLOAD_ERR_NO_FILE:    
              $message = 'Error: ningún archivo fue subido.';
              break;
         case UPLOAD_ERR_NO_TMP_DIR: 
              $message = 'Error: servidor no configurado para carga de archivos.';
              break;
         case UPLOAD_ERR_CANT_WRITE: 
              $message= 'Error: posible falla al grabar el archivo.';
              break;
         case  UPLOAD_ERR_EXTENSION: 
              $message = 'Error: carga de archivo no completada.';
              break;
         default: $message = 'Error: carga de archivo no completada.';
                  break;
        }
          echo json_encode(array(
                   'error' => true,
                   'message' => $message
                ));
    }
    
  • 2
    • 使用隐藏的iframe并设置表单's target to that iframe'的名称 . 这样,提交表单时,只会刷新iframe .

    • 为iframe的load事件注册了一个事件处理程序来解析响应 .

    我的博客文章的更多细节:http://blog.manki.in/2011/08/ajax-fie-upload.html .

  • 87
    $("#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上传文件......提交输入不能是外部表单元素:)

  • 3

    当您选择需要上传到服务器的文件时,您可以使用方法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;
    });
    });
    
  • 6

    使用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");
            }
        });
    });
    
  • 4

    是的,您可以,只需使用javascript获取文件,确保您将文件作为数据URL读取 . 在base64之前解析东西以实际获得基本64位编码数据然后如果你使用php或者实际上任何后端语言都可以解码base 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"]));
    

    当然你可能想要做一些验证,比如检查你正在处理的文件类型和类似的东西,但这是个主意 .

  • 2

    这是我想到的一个想法:

    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.
    });
    

相关问题