前言

最近项目更新一个新需求,要求把图片储存在SQLserver中,而不是储存在本地磁盘。很好,又有新东西可以学了。

正文

一、建表

这里大概建几个字段演示一下

CREATE TABLE [dbo].[ImageFile](
[Id] [UNIQUEIDENTIFIER] NOT NULL,
[Name] [NVARCHAR](200) NULL,--文件名
[Type] [NVARCHAR](50) NULL,--文件类型
[Image] [IMAGE] NULL--文件
)

二、插入数据

一般写入数据在后端结合业务,这里只写一个控制台测试


/// <summary>
/// 插入图片
/// </summary>
/// <param name="filePath">图片文件夹路径</param>
public void ImportImage(string filePath)
{
string conn = "server=.;database=Test;Uid=sa;Pwd=1;";
using (SqlConnection myconn = new SqlConnection(conn))
{
myconn.Open();
using (SqlCommand mycomm = new SqlCommand())
{
foreach (FileInfo item in dir.GetFiles("*.jpg"))//循环读取文件夹内的jpg文件
{
var pic = getJpgSize(item.FullName);
string str = string.Format("insert into ImageFile (ImageFileId,Name,Type,Image) values('{0}','{1}','{2}',@file)", Guid.NewGuid().ToString(), Path.GetFileNameWithoutExtension(item.FullName), item.Extension.Substring(1));//插入数据
mycomm.CommandText = str;
mycomm.Connection = myconn;
FileStream fs = new FileStream(item.FullName, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
Byte[] byData = br.ReadBytes((int)fs.Length);
fs.Close();
mycomm.Parameters.Add("@file", SqlDbType.Binary, byData.Length);
mycomm.Parameters["@file"].Value = byData;
mycomm.ExecuteNonQuery();
mycomm.Parameters.Clear();
}
}
}
}

三、读取文件

这一步根据不同的ORM框架来获取,可用 byte[] 对象承接图片

四、前端显示

1、这里默认是 png 格式,可根据实际情况写别的格式,jpg和png格式两个可以互换,只是记得png图片如果有透明区域转jpg后会变为白色,具体的大家可以试试

2、base64直接使用宽高默认为0,所以图片在 onload 时获取图片宽高

前端页面:

<img src="data:image/png;base64,这里写你的Base64代码" onload="imageLoad(this)" />

脚本:

// 获取图片真实高度
function imageLoad(_this) {
var imageSrc = $(_this).attr("src");
var img = new Image();
img.src = imageSrc;
// 如果图片被缓存,则直接返回缓存数据
if (img.complete) {
var width = img.width > img.height ? 550 : 310;
var height = img.height / img.width * width;
$(_this).css("width", width + "px")
$(_this).css("height", height + "px")
} else {
img.onload = function () {
var width = img.width > img.height ? 550 : 310;
var height = img.height / img.width * width;
$(_this).css("width", width + "px")
$(_this).css("height", height + "px")
}
}
}

五、图片放大

如果需要对图片进行放大,但是项目内的插件没有带这个功能,可以使用下面的方法

image增加单击事件:

<img onclick="imgEnlarge(this)" src="data:image/png;base64,这里写你的Base64代码" onload="imageLoad(this)" />

前端页面增加一个div:

<div id="imgEnlargeDiv" style="display: none; text-align: center;position: fixed;z-index: 1000;top: 0;left: 0;width: 100%;height: 100%;background-color: rgba(255,255,255,.9);">
<img id="bigimg" style="height: 90%;width: auto;border: 0px;margin: auto;position: absolute;top: 0;bottom: 0;left: 0;right: 0;" src="" />
</div>

脚本:

$(function () {
$("#imgEnlargeDiv").click(function () {//再次点击淡出消失弹出层
$(this).fadeOut("fast");
});
}); function imgShow(outerdiv, bigimg, _this) {
var src = _this.attr("src");//获取当前点击的pimg元素中的src属性
$(bigimg).attr("src", src);//设置#bigimg元素的src属性
$(outerdiv).fadeIn("fast"); //图片放大的div快速淡入显示层
} function imgEnlarge(_this) {
imgShow("#imgEnlargeDiv", "#bigimg", $(_this));
$("img[type ='showImg']").mouseover(function () {
$(this).css("cursor", "pointer");//鼠标移动到图片,鼠标箭头变为手势
});
$("img[type ='showImg']").click(function () {
var _this = $(this);//将当前的pimg元素作为_this传入函数
imgShow("#imgEnlargeDiv", "#bigimg", _this);
});
}

最后

这些东西很多都是利用网上有的,只是个人感觉都比较零散,所以整理出来给大家参考,也是给我自己做一份笔记。

同时感谢那些乐于分享的人!

SQLserver用Image格式储存图片的更多相关文章

  1. iPhone照片格式heic图片怎么打开

    苹果自iOS11系统之后默认的是heic图片格式,在电脑和安卓中都无法直接查看,需要将其转换图片格式,那苹果heic图片怎么转换成jpg格式?下面我们一起来看看吧! 使用工具:电脑.图片 操作方法: ...

  2. ElementUI的Upload上传,配合七牛云储存图片

    七牛云服务器的储存区域 存储区域 地域简称 上传域名 华东 z0 服务器端上传:http(s)://up.qiniup.com 华东 z0 客户端上传: http(s)://upload.qiniup ...

  3. java利用16进制来辨别png格式的图片

    很多人知道利用.png的字符串结尾可以判断前端传入的图片是否为png格式,但是这只是潜意识的判断!那么如何利用png读写的特殊内容来深意识地判断图片格式呢?最近在做东西的时候遇到了点问题,在加载图片的 ...

  4. 利用ArcMap对tiff或jpg格式地图图片的配准步骤

    原文:利用ArcMap对tiff或jpg格式地图图片的配准步骤 在实际应用中,经常会遇到提供一张高精度的地图图片文件,如何对将该图片进行配准(使图片具有经纬度坐标). 当然我们得有一些大概的参考图层, ...

  5. gif格式的图片不能存在与包含js目录的路径中?

    如题:gif格式的图片不能存在与包含js目录的路径中?是我的设置问题?还是真不能存在于js目录中. 今天纠结了一下午,某个项目中的效果就是出不来,找了差不多两个半小时... 在D盘新建一个js和jss ...

  6. 利用jpedal进行pdf转换成jpeg,jpg,png,tiff,tif等格式的图片

    项目中运用到pdf文件转换成image图片,开始时使用pdfbox开源库进行图片转换,但是转换出来的文件中含有部分乱码的情况.下面是pdfBox 的pdf转换图片的代码示例. try{ String ...

  7. jpg、png格式的图片转换成webp后颜色失真的问题

    今天简单的试用了一下 cweb.exe 将 jpg, png 格式的图片转换成 webp 格式. 我今天下载的是当前最新版:1.0.0 cwebp 3.jpg  -q 85 -o 3.webp 发现图 ...

  8. png格式的图片在IE6 下透明解决方案

    FF和IE7已经直接支持透明的png图了,下面这个主要是解决IE6下透明PNG图片有灰底的 style="FILTER: progid:DXImageTransform.Microsoft. ...

  9. python模块之imghdr(识别不同格式的图片文件)

    # -*- coding: utf-8 -*- #python 27 #xiaodeng #python模块之imghdr(识别不同格式的图片文件) import imghdr '''>> ...

随机推荐

  1. Nginx笔记总结十四: nginx反向代理,用内网域名转发

    user www www; worker_processes ; error_log logs/error.log; pid logs/nginx.pid; worker_rlimit_nofile ...

  2. Nginx笔记总结十:Nginx日志切割

    1.Nginx日志切割 logrotate日志文件管理工具,通过cron程序定期执行,默认在cron默认程序的dayli目录下 [root@joker logrotate.d]# cat /etc/c ...

  3. netty源码分析(十八)Netty底层架构系统总结与应用实践

    一个EventLoopGroup当中会包含一个或多个EventLoop. 一个EventLoop在它的整个生命周期当中都只会与唯一一个Thread进行绑定. 所有由EventLoop所处理的各种I/O ...

  4. Apollo配置中心介绍与使用指南

    转载于https://github.com/ctripcorp/apollo,by Ctrip, Inc. Apollo配置中心介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中 ...

  5. Swift 浅谈Struct与Class

    讨论Struct与Class之前,我们先来看一个概念:Value Type(值类型),Reference Type(引用类型): 1. 值类型的变量直接包含他们的数据,对于值类型都有他们自己的数据副本 ...

  6. Selenium&Pytesseract模拟登录+验证码识别

    验证码是爬虫需要解决的问题,因为很多网站的数据是需要登录成功后才可以获取的. 验证码识别,即图片识别,很多人都有误区,觉得这是爬虫方面的知识,其实是不对的. 验证码识别涉及到的知识:人工智能,模式识别 ...

  7. 有点长的博客:Redis不是只有get set那么简单

    我以前还没接触Redis的时候,听到大数据组的小伙伴在讨论Redis,觉得这东西好高端,要是哪天我们组也可以使用下Redis就好了,好长一段时间后,我们项目中终于引入了Redis这个技术,我用了几下, ...

  8. 压力测试(八)-多节点JMeter分布式压测实战

    1.Jmeter4.0分布式压测准备工作 简介:讲解Linux服务器上jmeter进行分布式压测的相关准备工作 1.压测注意事项 the firewalls on the systems are tu ...

  9. [Statistics] Comparison of Three Correlation Coefficient: Pearson, Kendall, Spearman

    There are three popular metrics to measure the correlation between two random variables: Pearson's c ...

  10. Nginx之反向代理配置(一)

    前文我们聊了下Nginx作为web服务器配置https.日志模块的常用配置.rewrite模块重写用户请求的url,回顾请参考https://www.cnblogs.com/qiuhom-1874/p ...