图片上传与下载

文件通过IO流上传到服务器,
图片不会存到数据库 因为图片太大了,数据库中存储的是图片的路径 显示图片的时候也是得到URL地址 然后从服务器中去取。(以后改进 用集群放图片,因为图片放在服务器影响服务器的效率)

1)标签用于在web页面中添加文件上传输入项,设置 文件上传输入项时须注意:必须要设置input输入项的name属性,否则浏览器将不会发送上传文件的数据。
2)必须把form的enctype属值设为multipart/form-data,这样才能知道我们提交的是文件
3)必须是post方式 get提交不了这么大的
使用Commons-fileupload组件实现文件上传,需要导入该组件相应的支撑jar包:Commons-fileupload和commons-io

改form表单,用io流上传,图片在上传完后会改名字,防指文件冲突,将地址发送给db。

文件上传实现步骤
1)创建DiskFileItemFactory对象,设置缓冲区大小和临时文件目录
2)使用DiskFileItemFactory 对象创建ServletFileUpload对象,并设置上传文件的大小限制。
3)调用ServletFileUpload.parseRequest方法解析request对象,得到一个保存了所有上传内容的List对象。
4)对list进行迭代,每迭代一个FileItem对象,调用其isFormField方法判断是否是上传文件
为普通表单字段,则调用getFieldName、getString方法得到字段名和字段值
为上传文件,则调用getInputStream方法得到数据输入流,从而读取上传数据。

// 1. 创建工厂对象
		FileItemFactory factory = new DiskFileItemFactory();
		// 2. 文件上传核心工具类
		ServletFileUpload upload = new ServletFileUpload(factory);
		// 设置大小限制参数
	upload.setFileSizeMax(10*1024*1024)// 单个文件大小限制
		upload.setSizeMax(50*1024*1024);	// 总文件大小限制
	upload.setHeaderEncoding("gbk");// 对中文文件编码处理

		// 判断是普通表单,还是带文件上传的表单
		if (upload.isMultipartContent(request)) {
			// 3. 把请求数据转换为list集合(包含文本数据和文件)
		List<FileItem> list = upload.parseRequest(request);
			// 遍历
			for (FileItem item : list){
				// 判断:普通文本数据
				if (item.isFormField()){
					// 获取名称
					String name = item.getFieldName();
					// 获取值
					String value = item.getString();
					System.out.println(value);
				} 
				// 文件表单项
				else {
					/******** 文件上传 ***********/
					// a. 获取文件名称
					String name = item.getName();
					// ----处理上传文件名重名问题----
					// a1. 先得到唯一标记
					String id = UUID.randomUUID().toString();
					// a2. 拼接文件名
					name = id + "#" + name;						
					
					// b. 得到上传目录

String basePath = getServletContext().getRealPath("/upload");
// c. 创建要上传的文件对象
File file = new File(basePath,name);
// d. 上传
item.write(file);
item.delete(); // 删除组件运行时产生的临时文件
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
在这里插入图片描述

在这里插入图片描述

文件下载
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值