RESTapi POST для загрузки файла, массив байтов всегда нулевой в контроллере? - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь загрузить файл (любого типа) в свою базу данных с типом данных столбца Image на сервере SQL, используя вызов REST Jquery Ajax. Вот так выглядит мой бизнес сервис общедоступное десятичное число

CreateDairyAttachmentInterface(BusinessEntities.DairyAttachmentInterfaceEntity dairyEntity)
        {
            using (var scope = new TransactionScope())
            {
                var dairy = new ATTACHMENT_HEADER
                {
                    DIARY_HEADER_ID = dairyEntity.DIARY_HEADER_ID,
                    ATTACHMENT_TYPE = dairyEntity.ATTACHMENT_TYPE,
                    ATTACHMENT_TITLE = dairyEntity.ATTACHMENT_TITLE,
                    ATTACHMENT_DESC = dairyEntity.ATTACHMENT_DESC,
                    ATTACHMENT_CATEGORY = dairyEntity.ATTACHMENT_CATEGORY,
                    ATTACHMENT_SHORT_TEXT = dairyEntity.ATTACHMENT_SHORT_TEXT,
                    FILE_NAME = dairyEntity.FILE_NAME,
                    FILE_TYPE = dairyEntity.FILE_TYPE,
                    FILE_DATA = dairyEntity.FILE_DATA,
                    CREATION_DATE = dairyEntity.CREATION_DATE,
                    CREATED_BY = dairyEntity.CREATED_BY,
                    LAST_UPDATE_DATE = dairyEntity.LAST_UPDATE_DATE,
                    LAST_UPDATE_LOGIN = dairyEntity.LAST_UPDATE_LOGIN,
                    ERP_TRANSFER_CHECK = dairyEntity.ERP_TRANSFER_CHECK,
                    PORTAL_TRANSFER_CHECK = dairyEntity.PORTAL_TRANSFER_CHECK,
                    INTERFACE_TRANSFER_CHECK = dairyEntity.INTERFACE_TRANSFER_CHECK,
                    IS_TEMP = dairyEntity.IS_TEMP

                };
                _unitOfWork.DairyAttacmentInterfaceRepository.Insert(dairy);
                _unitOfWork.Save();
                scope.Complete();
                return dairy.ATTACH_HEADER_ID;
            }
        }

В этом коде выше я получаю dairyEntity.FILE_DATA = Null. Все значения, кроме этого, подходят нормально.

Вот так я отправляю свой файл.

function uploadingFile()
    {
        var dt = new Date($.now());                         
        var nowd = dt.getUTCFullYear() + "/" + dt.getMonth() + "/" + dt.getDate();
        var nowt = dt.getHours() + ":" + dt.getMinutes() + ":" + dt.getSeconds();
        var dnt = nowd + " " + nowt;
        var file = $('#attachmentFile')[0].files[0],
        fileName = file.name,
        fileType = file.type
        fileSize = file.size;
        var Token = $("#tokenkey").val();
        var filedata;// = "test";       
        var reader = new FileReader();      

      var data1;
      reader.addEventListener("load", function () { 
      var arrayBuffer = this.result,
      array = new Uint8Array(arrayBuffer),
      //binaryString = String.fromCharCode.apply(null, array);
      console.log(binaryString);

        data1={"DIARY_HEADER_ID":$("#diarynumber").val(),"ATTACHMENT_TYPE":$("#headerID").val(),"ATTACHMENT_TITLE":$("#attachmentTitle" ).val(),"ATTACHMENT_DESC":$("#attachmentDesc").val(),"ATTACHMENT_CATEGORY":"","ATTACHMENT_SHORT_TEXT":"","FILE_NAME":fileName,"FILE_TYPE":fileType,"FILE_DATA":array,"CREATION_DATE":dnt,"CREATED_BY":"0","LAST_UPDATE_DATE":dnt,"LAST_UPDATE_LOGIN":"0","ERP_TRANSFER_CHECK":"N","PORTAL_TRANSFER_CHECK":"Y","INTERFACE_TRANSFER_CHECK":"Y","IS_TEMP":"N"};
        console.log(JSON.stringify(data1));
        var urldata1= "http://localhost:55959/v1/Diary_Attach/Create";
            $.ajax({
                url: urldata1,
                type: 'POST',
                data: JSON.stringify(data1),
                cache: false,
                contentType: "application/json;charset=utf-8",
                processData: false,
                crossDomain: true,
                dataType: "json",            
                headers: {
                    "Token": Token
                 },
                success: function (response) {
                    alert("Document uploaded successfully.");
                },
                 error: function (jqXHR, status) {
                     // error handler
                     console.log(jqXHR);
                     alert('fail' + status);
                 }
            });
      }, false);

      if (file) {
        reader.readAsArrayBuffer(file);
      }   
    }

В этом коде выше я загружаю файл, используя множество других параметров. Я конвертирую файл, так как мой контроллер ожидает от меня отправки файла в виде массива BYTE. Я конвертирую это, и это хорошо. Но когда выполняется пост-вызов, FILE_DATA имеет значение null. Хотя в console.log он отображается правильно, как показано ниже

{"DIARY_HEADER_ID":"6","ATTACHMENT_TYPE":"40","ATTACHMENT_TITLE":"","ATTACHMENT_DESC":"","ATTACHMENT_CATEGORY":"","ATTACHMENT_SHORT_TEXT":"","FILE_NAME":"ADF-2.pdf","FILE_TYPE":"application/pdf","FILE_DATA":{"0":37,"1":80,"2":68,"3":70,"4":45,"5":49,"6":46,"7":51,"8":13,"9":37,"10":226,"11":227,"12":207,"13":211,"14":13,"15":49,"16":49,"17":32,"18":48,"19":32,"20":111,"21":98,"22":106,"23":13,"24":60,"25":60,"26":13,"27":47,"28":84,"29":121,"30":112,"31":101,"32":32,"33":47,"34":65,"35":110,"36":110,"37":111,"38":116,"39":32,"40":47,"41":83,"42":117,"43":98,"44":116,"45":121,"46":112,"47":101,"48":32,"49":47,"50":76,"51":105,"52":110,"53":107,"54":32,"55":47,"56":82,"57":101,

FILE_DATA определяется в бизнес-сущности, подобной этой

public byte[] FILE_DATA { get; set; }

Почему вызов rest не отправляет значение BYTE ARRAY на контроллер, почему он всегда равен нулю? Это был целый день для меня, и у меня скоро наступит тупик. Пожалуйста, помогите.

Спасибо

1 Ответ

0 голосов
/ 05 июля 2018

Это будет null, потому что Url в вашем вызове ajax неверен. Попробуйте обновить ваш AJAX-вызов:

var urldata1= "/v1/Diary_Attach/CreateDairyAttachmentInterface"; //Example: /v1/ControllerName/ActionName

$.ajax({
url: urldata1,
type: 'POST',
data: {dairyEntity: JSON.stringify(data1)},  //Parameter matching name
cache: false,                    
contentType: "application/json;charset=utf-8",                       
processData: false,                        
crossDomain: true,
dataType: "json",            
headers: {
  "Token": Token
  },
  success: function (response) {
  alert("Document uploaded successfully.");
  },
  error: function (jqXHR, status) {
  // error handler
  console.log(jqXHR);
  alert('fail' + status);
  }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...