在javascript中上传文件并通过api发送文件

时间:2017-05-15 09:31:11

标签: javascript ajax api

我试图上传文件并通过api作为文件发送。但没有开始工作。这是我用于上传并将我的文件发送到api。 但它最有可能发生错误消息。

$(document).on('change', '#txtUploadFile', function(e){

    var files = e.target.files;
    if (files.length > 0) {
       if (this.value.lastIndexOf('.xlsx') === -1){
          alert('Only ods files are allowed!');
          this.value = '';
          return;
       }
       if (window.FormData !== undefined) {
           var data = new FormData();
           for (var x = 0; x < files.length; x++){
               data.append("file" + x, files[x]);
           }

           $.ajax({
               type: "POST",
               contentType: "multipart/form-data",
               url: 'http://localhost/clicportaltest/rest/clicadmin/uploadExcel',

               data:{file:file},
               success: function(result) {
                   console.log(result);
               },
               error: function (xhr, status, p3, p4){
                   var err = "Error " + " " + status + " " + p3 + " " + p4;
                   if (xhr.responseText && xhr.responseText[0] == "{")
                       err = JSON.parse(xhr.responseText).Message;
                       console.log(err);
                    }
                });
        } else {
            alert("This browser doesn't support HTML5 file uploads!");
          }
     }
});

2 个答案:

答案 0 :(得分:0)

您不能JSON.stringify data因为FormData没有toJSON()方法,所以它被视为普通对象,导致{{1} }。

您可以实现自己的"{}"方法,也可以只将FormData.prototype.toJSON转换为处理程序中的字符串或普通对象。如何格式化data的字符串表示形式完全取决于API的预期。

答案 1 :(得分:0)

$(function(){
$('#submitUpload').on('click', function(){
    var file = document.getElementById("upload").files[0];
    var form = new FormData();
    form.append("file", file);

    var settings = {
      "async": true,
      "crossDomain": true,
      "url": "http://localhost/clicportaltest/rest/clicadmin/uploadExcel",
      "method": "POST",
      "processData": false,
      "contentType": false,
      "mimeType": "multipart/form-data",
      "data": form
    };

    $.ajax(settings).done(function (response) {
      console.log(response);
    });
  });
});