我必须使用Web API编写服务。在那种方法中,我应该收到2件物品:
将从移动应用程序调用此方法。在搜索主题后,在示例网页中,我将上传的文件转换为base 64(使用jQuery),然后我在服务器上收到了它:
<script type="text/javascript">
// Holds the load event results
var base64 = "";
//
function converToBase64() {
var file = document.querySelector('input[type=file]').files[0];
var reader = new FileReader();
// Event handler
reader.addEventListener("load", function () {
base64 = reader.result;
console.log(base64);
}, false);
// Fires the load event
if (file) {
reader.readAsDataURL(file);
}
}
// AJAX request
$(function () {
$('#Button1').click(function () {
var data = {};
data.Id = "3";
data.File = base64;
console.log(data);
alert("start");
$.ajax({
type: "POST",
url: "/api/SaveFile",
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
dataType: "json"
}).done(function (result) {
console.log(result);
});
})
});
</script>
<div>
<input type="file" onchange="converToBase64()"><br>
<input id="Button1" type="button" value="Submit" />
</div>
我不知道我的解决方案是否正确。无论如何,在服务器端接收后,我将base 64 string转换为byte[]
。
[HttpPost]
public HttpResponseMessage Post(FileUploadData data)
{
string converted = data.File.Substring(data.File.IndexOf(",") + 1, data.File.Length - data.File.IndexOf(",") - 1);
byte[] fileBytes = Convert.FromBase64String(converted);
// Do checking
return Request.CreateResponse(HttpStatusCode.OK, "Success");
}
public class FileUploadData
{
public string Id { get; set; }
public string File { get; set; }
}
我已经阅读了很多关于将字节保存到文件中的相同问题的解决方案。但在检查扩展名和大小之前,我不应该这样做。由于将禁止文件保存在物理空间是危险的,那么在保存到磁盘(作为文件)之前如何进行这些检查呢?因为。