我收到的ajax请求仅在一半时有效。
function receivedText() {
alert(fr.result); //Here i have good result
$.ajax({
type: "POST",
url: "/Gallery/UploadImage",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: {
byteArray: fr.result,
fileName: $('input[type=file]').val().split('\\').pop()
},
success: function (data) {
if (data == 0)
alert("error");
else
alert("Success");
},
error: function () {
alert("ERROR");
}
});
}
这是我的要求。如您所见,我在那里评论说,在我的测试(警报)fr.result
中,当我调试并在控制器中看到它时,它的值为BUT,它为NULL。
这是我的控制者。
[HttpPost]
public IActionResult UploadImage(byte[] byteArray, string fileName)
{
try
{
System.IO.File.WriteAllBytes(_hostingEnvironment.WebRootPath + "\\Uploads\\Images\\" + fileName, byteArray);
return Json(0);
}
catch
{
return Json(0);
}
}
答案 0 :(得分:1)
您以错误的方式使用ajax。
第一个错误是与Content-Type
不匹配
$.ajax({
...
contentType: "application/json; charset=utf-8",
...
data: {
byteArray: fr.result,
fileName: $('input[type=file]').val().split('\\').pop()
},
...
}
尽管已设置Content-Type=application/json
,但默认情况下,发送到服务器的有效负载为form-url-encoded
:
fileName=Xyz&byteArray=
如果需要JSON格式,则应使用 JSON.stringify({...})
获得文本表示形式。
contentType: "application/json;
在这里不合适。那是因为:
byte[]
。IActionResult UploadImage([FromBody] Fr fr)
如果要发送图像,最简单的方法是将 Content-Type
中的multipart/form-data
与 IFormFile
< / strong>同时在服务器端。
// action method
public IActionResult UploadImage(IFormFile image, string fileName)
{
// ...
}
现在您可以发送FormData
了:
// your receivedText() function
function receivedText(){
var formData = new FormData();
formData.append('fileName', 'Xyz.img');
// if you need upload image
var inputFileElement=document.getElementById("inputFileImage");
formData.append('image', inputFileElement.files[0]);
// of if you're already have a `byte[]`, you could do it as below:
// var blob = new Blob([bytearray]...); // see https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob
// formData.append('image', blob);
$.ajax({
type: "POST",
url: "/Gallery/UploadImage",
contentType: false,
processData: false,
data: formData,
success: function (data) {
console.log(data);
// ...
},
error: function () {
// ...
}
});
}
答案 1 :(得分:1)
那是你的主意:
public class UploadImageBindings {
public string byteArray {get;set;}
public string fileName {get;set;}
}
[HttpPost]
public IActionResult UploadImage(UploadImageBindings bindings)
{
try
{
var bytes = System.Text.Encoding.UTF8.GetBytes(bindings.byteArray);
System.IO.File.WriteAllBytes(_hostingEnvironment.WebRootPath + "\\Uploads\\Images\\" + bindings.fileName, bytes);
return Json(0);
}
catch
{
return Json(0);
}
}
您的问题是您没有以byte[]
的身份发布,而是必须以字符串的形式发布!