[英]Check uploaded file is a image or not using asp.net web api
我想检查上传的文件是图像还是不使用 asp.net web api。 我从客户端向 Web API 发送一个 JSON 字符串对象。 我可以从服务器端读取上传文件的数据,就像“ \ \JFIF\ \\\\ H\ H\ \ ”
像这样的Javascript代码:
var file = document.getElementById("UploadFile").files[0];
if (file) {
var fileReader = new FileReader();
fileReader.readAsText(file, "UTF-8");
fileReader.onload = function (evt) {
$scope.BookingForm.Extension.FileContent = fileReader.result;
$scope.BookingForm.Extension.FileName = file.name;
$scope.BookingForm.Extension.FileSize = file.size;
fileReader.result 是文件的数据。 这是将数据发布到 Web api 的 ajax 代码。
var fromdata = JSON.stringify($scope.BookingForm);
var requestUrl = "/webapp/api/onlineform/PostOnlineForm"
return $http({
method: 'POST',
url: requestUrl,
data: fromdata,
headers: {
"Content-Type": "application/json; odata=verbose"
}
});
这是服务器端的功能:
public async Task<IHttpActionResult> PostOnlineForm(OnlineForm formData)
{
Newtonsoft.Json.Linq.JObject extensionObj = Newtonsoft.Json.Linq.JObject.Parse(formData.Extensions);
var dataOfFile = extensionObj["FileContent"].ToString();
// code here
}
变量“dataOfFile”是上传文件的字符串数据。 我想检查变量“dataOfFile”是否是图像。 非常感谢你。
检查文件的文件签名(以下代码IsImage()
检查 BMP、GIF、PNG、TIFF、JPEG)
public static class Extensions
{
public static bool IsImage(this byte[] fileBytes)
{
if (fileBytes.Length < 2)
{
return false;
}
var headers = new List<byte[]>
{
new byte[] { 0x42, 0x4D }, // BMP
new byte[] { 0x47, 0x49, 0x46, 0x38, 0x37, 0x61 }, // GIF
new byte[] { 0x47, 0x49, 0x46, 0x38, 0x39, 0x61 }, // GIF
new byte[] { 0x89, 0x50, 0x4e, 0x47, 0x0D, 0x0A, 0x1A, 0x0A }, // PNG
new byte[] { 0x49, 0x49, 0x2A, 0x00 }, // TIFF
new byte[] { 0x4D, 0x4D, 0x00, 0x2A }, // TIFF
new byte[] { 0xFF, 0xD8, 0xFF }, // JPEG
new byte[] { 0xFF, 0xD9 }, // JPEG
};
return headers.Any(x => x.SequenceEqual(fileBytes.Take(x.Length)));
}
}
您的服务器端功能将成为
public async Task<IHttpActionResult> PostOnlineForm(OnlineForm formData)
{
Newtonsoft.Json.Linq.JObject extensionObj = Newtonsoft.Json.Linq.JObject.Parse(formData.Extensions);
var dataOfFile = extensionObj["FileContent"].ToString();
// get first 8 bytes
int length = Math.Min(8, Encoding.UTF8.GetByteCount(dataOfFile));
byte[] fileBytes = Encoding.UTF8.GetBytes(dataOfFile, 0, length);
bool isImage = fileBytes.IsImage();
}
顺便说一下,在 json body 中发布文件内容并不是上传文件的最佳方式。 考虑文件上传方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.