原生图片上传与加载

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'/>

以上是关于原生图片上传与加载的主要内容,如果未能解决你的问题,请参考以下文章

原生js上传 加预览 兼容ie

原生方式实现图片,文件上传,和使用ElmentUI使用Drag方式自动上传图片,手动上传图片

原生Js图片上传

知了堂学习笔记ajax工作原理

使用原生input的file属性上传图片和element的多路径上传图片

vue 实现图片上传与预览,以及清除图片