欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原生态图片上传与加载

程序员文章站 2022-05-28 12:22:04
...

前几天公司里安排了任务需要维护某项目的几个模块,其中一个模块里的功能就是图片的上传与加载,由于这个项目使用的技术和框架都相对旧一点,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'/>
相关标签: 加载图片