原生图片上传与加载
Posted 张文琪2022
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生图片上传与加载相关的知识,希望对你有一定的参考价值。
前几天公司里安排了任务需要维护某项目的几个模块,其中一个模块里的功能就是图片的上传与加载,由于这个项目使用的技术和框架都相对旧一点,jdk用的是1.6版本的,有些功能像文件上传下载有非常成熟的框架可以使用。从网上搜集资料得知图片上传常用的有两种方法,一种是编码Base64后直接存入数据库;一种是上传到本地的某个文件目录下,然后数据库中存路径。第一个种方法可以Base64Encoder工具实现,但是由于jdk版本太低无法支持,所以这种方法放弃,所以采用了第二种方法,一开始的时候一直在纠结路径如何确定,因为上传的话肯定要上传到一个物理路径(当时以为只能上传到项目部署路径上才可以访问),而加载图片肯定要访问一个URL(后来发现加载图片也可以通过IO流),所以就陷入了一个困境。不过最终与其他大佬们讨论得知了加载图片不一定非要通过URL访问,然后问题就解决了。接下来说一下我写的代码(由于涉及到公司代码保密问题,我只上传自己写的其中一部分):
前台:
<form method="post" id="imgForm" enctype="multipart/form-data">
照片:<input type="file" id="photo" name="photo"/>
</form>
注意file的input不能直接获取或赋值,只能随表单提交。另外我做的功能里不止有图片上传还有其他信息,我采用方法是用两个表单,具体原因在后台的时候解释。
后台:
上传:
文件上传和普通input 的表单是不同的,前者必须要在form加enctype=“multipart/form-data”,且以流的形式到后台,后台也不能再使用request.getParameter获取值。这也是前台为什么分成两个表单的原因,当然普通input的表单也可以通过流提交,只要在后台做好判断就行。
关于上传代码,我用的是项目提供的API,所以不能在这里展示,大家可以搜一下request流之类的,网上资源很多。
加载:
加载图片的时候也是通过流的形式加载
public void IoLoadImage(HttpServletRequest request,HttpServletResponse response) throws IOException
ServletOutputStream out = null;
FileInputStream ips = null;
try
//获取图片存放路径
String imgPath = "";
ips = new FileInputStream(new File(imgPath));
response.setContentType("multipart/form-data");
out = response.getOutputStream();
//读取文件流
int len = 0;
byte[] buffer = new byte[1024 * 10];
while ((len = ips.read(buffer)) != -1)
out.write(buffer,0,len);
out.flush();
catch (Exception e)
e.printStackTrace();
finally
out.close();
ips.close();
html里展示:
<!-- src直接放入访问后台的链接,保证可以访问上述后台代码即可 -->
<img src=“” style='width:50px;height:80px'/>
以上是关于原生图片上传与加载的主要内容,如果未能解决你的问题,请参考以下文章
原生方式实现图片,文件上传,和使用ElmentUI使用Drag方式自动上传图片,手动上传图片