Я пытаюсь загрузить файл (любого типа) в свою базу данных с типом данных столбца 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 на контроллер, почему он всегда равен нулю? Это был целый день для меня, и у меня скоро наступит тупик. Пожалуйста, помогите.
Спасибо