eclipse+maven+javaweb项目文件及图片的上传及下载

本文介绍了如何在Eclipse Maven JavaWeb项目中实现文件和图片的上传与下载。通过配置pom.xml添加上传依赖,设置JSP文件的enctype属性,编写Servlet代码分别处理文件加载、展示和下载操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件及图片的上传及下载

配置:

pom.xml文件图片上传依赖:

<dependency>
		<groupId>commons-fileupload</groupId>
		<artifactId>commons-fileupload</artifactId>
		<version>1.3.3</version>
	</dependency>
	<dependency>
		<groupId>commons-io</groupId>
		<artifactId>commons-io</artifactId>
		<version>2.6</version>
	</dependency>

JSP文件

标签:enctype属性规定在发送到服务器之前应该如何对表单数据进行编码

在这里插入图片描述

文件上传

<form action="load" method="post" enctype="multipart/form-data">
		上传文件:<input type="file" name="myfile" /><br />
		 文件描述:<input type="text" name="discr" size="20" /><br>
		<input type="submit" value="文件提交" />
</form>
action="load"的Servlet代码
/*
 * 1、DiskFileItemFactory :把表单提交的图片、文本等空间对象封装成一个个
     的FileItem
 * ServletFileUpload :支持文件上传的servlet类 2、 调用
 * parseRequest(request)解析出FileItem对象的List集合;
 * 3、isFormField():返回true说明FileItem封装的是非文件,反之是文件;
 * 4、如果是非文件:获取控件的名字和值:getFieldName()/getString();
 * 5、如果是文件:获取文件的名字:getName();FileItem.getInputStream();
 */
 // 创建工厂
 DiskFileItemFactory factory = new DiskFileItemFactory();
 File f = new File("F:\\target");
 if (!f.exists()) {
 // mkdirs()可以建立多级文件夹, mkdir()只会建立一级的文件夹
       f.mkdirs();
 }
// 设置文件的缓存路径
factory.setRepository(f);
// 创建fileupload组件
ServletFileUpload fileupload = new ServletFileUpload(factory);
fileupload.setHeaderEncoding("utf-8");
try {
     // 解析request
	  List<FileItem> fileItems = fileupload.parseRequest(request);
	  //遍历集合
     for (FileItem fileItem : fileItems) {
            //判断是否为文件
            if (fileItem.isFormField()) {//不是文件
                   //获取字段名和字段值
                   String name = fileItem.getFieldName();
                   String value = fileItem.getString("utf-8");
                   System.out.println(name + "*****" + value);
             } else {//是文件
                   //获取上传文件的名字
                   String filename = fileItem.getName();
                   System.out.println("文件名字:" + filename);
                   //处理文件路径名
                   filename = filename.substring(filename.
                                        lastIndexOf("\\") + 1);
                   //创建存放上传文件的文件夹
                   String webPath = "/upload/";
                   //映射路径转化成物理路径(获取物理路径)
                   String filepath = request.getServletContext()
                                            .getRealPath(
                                            webPath + filename);
                   System.out.println("物理路径:" + filepath);
                   // 创建文件(转化成文件对象)
                   File file = new File(filepath);
                   file.getParentFile().mkdirs();
                   file.createNewFile();
                   InputStream inputStream = fileItem.getInputStream();
                   OutputStream outputStream = new FileOutputStream(file);
                   byte[] buffer = new byte[1024];
                   int len = -1;
                   while ((len = inputStream.read(buffer)) != -1) {
                          outputStream.write(buffer, 0, len);
                    }
                    // 关闭流
                    inputStream.close();
                    outputStream.close();
                    // 删除临时文件
                    fileItem.delete();
             }
      
      }
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

文件展示

request.setCharacterEncoding("utf-8");
	response.setContentType("text/html;charset=utf-8");
	//获取servletcontext对象,获取给定的文件在服务器上面的绝对路径 (实际上输出的就是文件在电脑中的绝对路径,也就是读取web中的资源文件;)
	String path = request.getServletContext().getRealPath("/upload");
	//转化File对象
	File file = new File(path);
	File[] fs = file.listFiles();
	List<String> names = new ArrayList<String>();
	for(File f:fs){
		String fileName = f.getName();
		names.add(fileName);
		System.out.println(fileName);
	}
	request.setAttribute("names", names);
	request.getRequestDispatcher("show.jsp").forward(request, response);
	}
show.jsp文件
<c:forEach items = "${names}" var="name">
<a href = "${pageContext.request.contextPath}/down?name=${name}">
<img src="${pageContext.request.contextPath }/down?name=${name}" 
width="300" height="200"/></a><br/>
</c:forEach>

文件下载

href="down"的servlet代码
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String name = request.getParameter("name");
String path = request.getServletContext().getRealPath("/upload/");
File f = new File(new File(path), name);
//增加文件消息头,告诉浏览器是下载
response.addHeader("Content-Type", "application/x-msdownload");
response.addHeader("Content-Disposition", "attachment;filename=" + name);
System.out.println(path+name);
		
// 对当前下载文件创建输入流
InputStream in = new FileInputStream(f);
OutputStream out = response.getOutputStream();
byte[] buffere=new byte[1024];
int len=-1;
while((len=in.read(buffere))!=-1){
out.write(buffere, 0, len);
}

OK了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值