java如何将图片保存在数据库中

java如何将图片保存在数据库中,第1张

一般都是这样的,就是在你服务器有一个专门放置图片的文件夹,然后数据库保存的是你服务器图片的路径。需要用的时候就去数据库里面取路径。得到路径以后你想怎么处理图片是你的事情了。

至于如何去数据库取路径这个就是简单的db操作。

加载驱动类:

Class.forName(DBDriver)

获取连接:

Connection conn = DriverManager.getConnection(url,username,password)

创建操作对象:

PreparedStatement stmt = con.prepareStatement(sql)

执行操作:

ResultSet rs = stmt.executeQuery()

遍历结果:

List list = new ArrayList()

while(rs.next()){

//具体操作,通常用rs.getString(name)取值

Image img = new Image()//图片类对应你数据库中图片表格

img.setSrc(rs.getString("src"))//假设你数据库中image表中图片地址字段是src

list.add(img)

}

记得关闭资源:

rs.close()

stmt.close()

con.close()

看你的意思是已经取出来了不知道怎么显示:

你取出来之后可以把图片放在一个list里面然后去页面上遍历这个list

<c:forEach var="chakan1" items="list">

<tr>

<td>

<img src="${chakan1.src}"/>

</td>

</tr>

</c:forEach>

大致应该是这样

一般有两种情况,

一种是前端开发需要显示的图片,这个是页面构成必须的元素,一般这些会做 动静分离,后台接口 跟 前端资源会部署在不同的服务器上,有不同的优化,一般会有转发的服务器,判断是后台接口,就转发到后台的服务器,如果是前端资源,就转发到前台的服务器。一般情况下,前端服务器,跟后台的服务器,是分离开的,有不同的人去管理,如果项目小的话,可能就全放在一个。这个优化的化,你可以去了解下 CDN原理。这个是用来优化静态资源加载情况的。

另一种情况是,显示的图片,不是前端构成的,是用户上传文件产生的,这种情况下,现在一般有专门的对象存储,用过 七牛云,跟阿里的。这个的逻辑是文件上传的时候,不是上传到我们自己的服务器,上传到专门的云服务器,我们自己数据库只需要保存这些上传文件的地址,真正使用的时候,把连接给前端,前端自动会根据内容到专门的云服务器上去获取。所有的安全,优化,带宽,缓存命中,这些都有由云服务器去保证。 简单来说,只有有钱,这些东西根本不会成为你项目的瓶颈。

作为技术,我们讨论的应该不是这些。图片会做备份,这个可以有专门的磁盘阵列去实现,简单来说,就是上传的内容保存到磁盘的时候,会自动多保存几个备份到不同的磁盘上。还是那句话,多去了解下CDN的原理,最后这段,个人理解,不一定对。

ublic HttpServletResponse download(String path, HttpServletResponse response) {

try {

// path是指欲下载的文件的路径。

File file = new File(path)

// 取得文件名。

String filename = file.getName()

// 取得文件的后缀名。

String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase()

// 以流的形式下载文件。

InputStream fis = new BufferedInputStream(new FileInputStream(path))

byte[] buffer = new byte[fis.available()]

fis.read(buffer)

fis.close()

// 清空response

response.reset()

// 设置response的Header

response.addHeader("Content-Disposition", "attachmentfilename=" + new String(filename.getBytes()))

response.addHeader("Content-Length", "" + file.length())

OutputStream toClient = new BufferedOutputStream(response.getOutputStream())

response.setContentType("application/octet-stream")

toClient.write(buffer)

toClient.flush()

toClient.close()

} catch (IOException ex) {

ex.printStackTrace()

}

return response

}


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/283588.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-22
下一篇2023-04-22

发表评论

登录后才能评论

评论列表(0条)

    保存