zoukankan      html  css  js  c++  java
  • .Net Core图片上传,将上传图片转化为byte[]类型保存到数据库中

    一、数据上传(将图片信息上传至数据库)

    这里那我是用的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="60%;min-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);
            }
    

      

     

  • 相关阅读:
    为TextBox定义快捷键
    (转)再谈“我是怎么招聘程序员的”
    (转)jQuery框架学习第二天:jQuery中万能的选择器
    (转)MongoDB学习笔记(一) MongoDB介绍及安装
    asp.net 导出CSV
    领域驱动设计下系统层次结构风格(转载)
    (转)谈谈数据加密的处理提供各种算法处理
    (转)REST服务开发实战
    领域驱动设计系列文章(2)——浅析VO、DTO、DO、PO的概念、区别和用处
    (转)你的工作不是命令人们去做什么
  • 原文地址:https://www.cnblogs.com/LanHai12/p/15258101.html
Copyright © 2011-2022 走看看