一、數據上傳(將圖片信息上傳至數據庫)
這里那我是用的EFcore連接的數據庫。數據庫的名稱為test,字段為

前端
主要是數據的傳輸這塊需要注意,data分兩塊發送一個發送上傳文件,一個發送其他的信息
@{
ViewData["Title"] = "Home Page";
}
<script src="~/jquery/jquery.min.js"></script>
<div>添加數據</div>
<div>
<form id="from-upFile" name="form" method="post" enctype="multipart/form-data">
<input type="text" id="name" name="Name" />
<br />
<input type="file" id="file" name="Image" />
<br />
<input type="button" value="添加" onclick="a()" />
</form>
<script>
function a() {
var name = $("#name").val();
$.ajax({
url: "/Home/StudentAdd",
//data: new FormData(document.getElementById("from-upFile")),
data: { "Name": name},
data: new FormData(document.getElementById("from-upFile")),
// 告訴jQuery不要去處理發送的數據,用於對data參數進行序列化處理 這里必須false
processData: false,
// 告訴jQuery不要去設置Content-Type請求頭
contentType: false,
type: "post",
dataType: "json",
success: function (json) {
console.log(json);
},
error: function (json) {
}
});
}
</script>
</div>
后端接收
Request.Form.Files[0]這塊那我是通過打斷點的方式,知道他的類型為Formfile的
[HttpPost]
public string StudentAdd(string Name)
{
//HttpContext.Request.Files[0];framework框架控制器獲取上傳文件
//FileStream fs = HttpContext.Current.Request.Files[0]; //獲取上傳文件,framework框架api
//IFormFileCollection files = Request.Form.Files;上傳的文件合集
FormFile file = Request.Form.Files[0] as FormFile;//上傳文件
Stream fs =file.OpenReadStream();//打開讀取上傳文件的請求流
//將圖片轉化位byte[] 格式進行數據存儲
BinaryReader br = new BinaryReader(fs);//將原始數據類型讀取為二進制的值
byte[] imgBytesIn = br.ReadBytes((int)fs.Length); //將流讀入到字節數組中
StudentInfo s = new StudentInfo() { Name=Name,Image=imgBytesIn};
using (TestDateBase db = new TestDateBase())
{
db.StudentInfos.Add(s);
db.SaveChanges();
}
return "文件已上傳!";
}
注意如果是framework框架的話,后台獲取上傳信息會有些不一樣的地方!
二、顯示數據(將數據庫image數據顯示在頁面之中)
方式一(razor頁面)頁面和后端在一個解決方案上
前端
@{ ViewData["Title"] = "Home Page"; } @model List<StudentInfo> <script src="~/jquery/jquery.min.js"></script> <div>數據顯示</div> <div> <ul> @foreach (var item in Model) { <li><img src='@(item.Image!=null?"data:image/png;base64,"+Convert.ToBase64String(item.Image):"")' /></li> } </ul> </div>
后端控制器

方式二(常用使用ajax獲取數據顯示在頁面之上)前后端分離的情況下
前端
<script src="~/jquery/jquery.min.js"></script>
<h2>數據顯示</h2>
<style>
table {
table-layout:fixed;
}
table, table tr {
border-collapse:collapse;
}
table tr td {
word-spacing:normal;
}
</style>
<table id="StudentInfosTable" border="1" style="width:60%;min-width:500px;margin:0 auto">
<tr>
<td>姓名</td>
<td>圖片</td>
</tr>
</table>
<a href="#" id="btn">點擊查詢數據</a>
<div>
<script>
document.getElementById("btn").onclick = function () {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Home/Privacy', true);
xhr.responseType = "json"; //arraybuffer blob
//xhr.setRequestHeader("client_type", "DESKTOP_WEB");
//xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function () {
if (xhr.status == 200 && xhr.readyState == 4) {
var response = 'response' in xhr ? xhr.response : xhr.responseText;
//console.log(xhr.response instanceof Blob);
// 方法二
//var blob = new Blob([xhr.response], { type: "image/png" });//返回類型為 arraybuffer
//var imageUrl = (window.URL || window.webkitURL).createObjectURL(xhr.response);//返回類型為 blob
for (var i = 0; i < response.length; i++) {
$("#StudentInfosTable").append("<tr><td>" + response[i].name + "</td><td><img src='data:image/png;base64," + response[i].image + "' width='100'height='100' /></td></tr>");
}
}
};
xhr.send();
}
</script>
</div>
API接口傳輸數據
[HttpPost]
public JsonResult Privacy()
{
TestDateBase db = new TestDateBase();
var a = db.StudentInfos.ToList();
//MemoryStream ms = new MemoryStream(b.last().Image);//在內存中操作圖片數據
//Bitmap bmp = new Bitmap(Bitmap.FromStream(ms));
return Json(a);
}
