文件上传下载技术

上传页面设置

<form action="DealServlet" method="post" enctype="multipart/form-data">
	用户名:<input type="text" name="username"><br/>
	密码:<input type="text" name="password"><br/>
	头像1<input type="file" name="picture"><br/>
	头像2<input type="file" name="picture2"><br/>
	<input type="submit" value="submit">
</form>

文件上传需要使用post方法 enctype以附件形式上传
导入jar包
commons-fileupload-1.2.1.jar
commons-io-1.3.2.jar

上传页面处理

InputStream in = null;
FileOutputStream fos = null;
try {
	// 1。创建解析工厂DiskFileItemFactory对象
	DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
	// 2.创建ServletFileUpload对象
	ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
	// 3.解析request对象,得到所有上传内容的LIst集合
	List<FileItem> parseRequest = servletFileUpload.parseRequest(request);

	User user = new User();
	// 4.遍历集合,对每一个FileItem对象调用
	for (FileItem fileItem : parseRequest) {
		// 判断是否为文件
		if (fileItem.isFormField()) {
			// 普通表单字段
			String name = fileItem.getFieldName();
			String val = fileItem.getString();
			if (name.equals("username")) {
				user.setUsername(val);
			} else if (name.equals("password")) {
				user.setPassword(val);
			}

		} else {
			// 读取文件
			in = fileItem.getInputStream();
			String filename = fileItem.getName();// 获取文件名

			String substring = filename.substring(filename.indexOf("."));// 文件后缀
			String temp = new Date().getTime() + substring;// 文件别名
			fos = new FileOutputStream("C:/java1/temp/" + temp);
			byte[] b = new byte[1024];
			int len = -1;
			// 注意read为read(byte)
			while ((len = in.read(b)) != -1) {
				fos.write(b, 0, len);
				fos.flush();
			}
			String name = fileItem.getFieldName();
			if (name.equals("picture")) {
				user.setPicture("/images/" + filename);
				user.setBpicture("/images/" + temp);
			} else if (name.equals("picture2")) {
				user.setPicture2("/images/" + filename);
				user.setBpicture2("/images/" + temp);
			}
		}
	}
	
	System.out.println(user.getUsername());
	System.out.println(user.getPassword());
	System.out.println(user.getPicture() + "  " + user.getBpicture());
	System.out.println(user.getPicture2() + "  " + user.getBpicture2());

} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	if (in != null) {
		in.close();
	}
	if (fos != null) {
		fos.close();
	}
}

配置tomcat中server.xml的映射

 <Context docBase="C:\java1\temp" path="/images" reloadable="true"/>

文件下载页面

<a href="download?filename=1594965919551.jpg">1594965919551.jpg</a>

下载处理

FileInputStream fis = null;
ServletOutputStream out = null;
try {
	String filename = request.getParameter("filename");
	fis = new FileInputStream("C:/java1/temp/"+filename);
	//1.设置文件类型【以附件形式下载】
	response.setContentType("multipart/form-data");
	//2.设置文件头
	response.setHeader("Content-Disposition", "attachment;fileName="+filename);
	//3.获取输出流
	out = response.getOutputStream();
	//4.向浏览器响应文件
	byte[] b = new byte[1024];
	int len = -1;
	while ((len = fis.read(b)) != -1) {
		out.write(b, 0, len);
	}
} catch (Exception e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	if(fis != null){
		fis.close();
	}
	if(out != null){
		out.close();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值