day5_2_Servlet文件上传下载

一:上传
1.webcontent下创一个名为upload的文件夹
2.web.xml配置

<servlet>
    <servlet-name>UploadServlet</servlet-name>
    <servlet-class>com.briup.upload.UpLoadServlet</servlet-class>
    <init-param>
    <param-name>path</param-name>
    <param-value>/upload</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>UploadServlet</servlet-name>
    <url-pattern>/Upload</url-pattern>
  </servlet-mapping>

3…webcontent下创一个名为upload.html的页面

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test.html</title>
</head>
<body>
	
	<h1>hello world</h1>
	<h2>上传</h2>
	<!--涉及到图片之类就不用request来获取了  -->
	<!--  action代表上传路径-->
	<form action="UpLoad" method="post" enctype="multipart/form-data">
		<input type="text" name="username" /><br>
		<input type="file" name="MyImage" /><br>
		<input type="submit" value="上传" />
	</form>
</body>
</html>

4.servlet

package com.briup.upload;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class UpLoadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private String path;
	
	@Override
	public void init() throws ServletException {
		//在web.xml中把path值传过来
		//path是上传路径
		path = getServletConfig().getInitParameter("path");
	}
	
	
	@SuppressWarnings("unchecked")
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		
		//获得上传目录的绝对路径
		String realpath = this.getServletContext().getRealPath(path);
		
		try {
			//构造一个文件上传处理对象,第三方插件写好的类 DiskFileItemFactory 文件条目工厂(上传文件的工厂类)
			DiskFileItemFactory factory = new DiskFileItemFactory();
			ServletFileUpload upLoad = new ServletFileUpload(factory);
			
			//获得表单中提交内容
			List<FileItem> list = upLoad.parseRequest(request);

			for (FileItem fileItem : list) {
				//fileItem.isFormField()返回true表示是普通的表单组件 用户名密码
				//fileItem.isFormField()返回false表示是上传
				if (fileItem.isFormField()) {
					// getName()方法返回的是文件名字 普通表单组件有文件,返回NULL
					String FieldName = fileItem.getFieldName();
					//这里就不用request来取值了
					String Content = fileItem.getString("UTF-8");
					//content获取的是值
					//为了后面可以把普通参数从request中拿出来
					request.setAttribute(FieldName, Content);
				} else {
					//取得上传文件的名字
					String fileName = fileItem.getName();
					//避免文件名字重复
					fileName = System.currentTimeMillis()+fileName;
					File file = new File(realpath, fileName);
					//把上传文件进行指定目录
					fileItem.write(file);
				}
			}
			System.out.println("request.getAttribute(\"username\") = "+request.getAttribute("username"));
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

在这里插入图片描述在这里插入图片描述在这里插入图片描述那就对了本来就不会在那个文件里边出现,在你本地的Tomcat文件夹下面的项目目录里
在这里插入图片描述有时候重启的话会删除这个文件夹里边的东西,这也可以理解,因为你是项目里上传的所以关闭项目删除也可以理解
多上传:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test.html</title>
</head>
<body>
	
	<h1>hello world</h1>
	<h2>上传</h2>
	<!--涉及到图片之类就不用request来获取了  -->
	<!--  action代表上传路径-->
	<form action="UpLoad" method="post" enctype="multipart/form-data">
		<input type="text" name="username" /><br>
		<input type="file" name="MyImage" /><br>
		<input type="file" name="MyImage1" /><br>
		<input type="file" name="MyImage2" /><br>
		
		<!--<input type="file" name="MyImage" /><br> 多复制就是上传多个 名字得改一下  -->
		<input type="submit" value="上传" />
	</form>
</body>
</html>

其实就是多加几行代码 复制一下改个名字就好

<input type="file" name="MyImage" /><br>
<input type="file" name="MyImage1" /><br>

在这里插入图片描述在这里插入图片描述在这里插入图片描述里边的东西被覆盖了
二:下载:
1.webcontent下创一个名为download的文件夹
2.web.xml配置

 <servlet>
    <servlet-name>DownLoadServlet</servlet-name>
    <servlet-class>com.briup.upload.DownLoadServlet</servlet-class>
    <init-param>
    <param-name>path</param-name>
    <param-value>/download</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>DownLoadServlet</servlet-name>
    <url-pattern>/DownLoad</url-pattern>
  </servlet-mapping>

3…webcontent下创一个名为download.html的页面

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>test.html</title>
</head>
<body>
	<h1>hello world</h1>
	<h2>servlet下载</h2>
	<a href="DownLoad?fileName=1.png">1.png</a><br>
</body>
</html>

4.servlet
package com.briup.upload;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownLoadServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
private String path;

@Override
public void init() throws ServletException {
	//在web.xml中把path值传过来
	path = getServletConfig().getInitParameter("path");
}

@Override
protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
	request.setCharacterEncoding("UTF-8");
	response.setCharacterEncoding("UTF-8");
	
	// 获得用户需要下载文件的名字
	String fileName = request.getParameter("fileName");

	// 下载文件所在目录的绝对路径
	String realPath = getServletContext().getRealPath(path);

	// 设置为下载application/x-download
	response.setContentType("application/x-download");
	
	// 下载文件时显示的文件保存名称
	String fileDisplay = "briup_"+fileName;
	// 中文编码转换
	fileDisplay = URLEncoder.encode(fileDisplay, "UTF-8");
	
	//设置响应头部信息
	response.addHeader("Content-Disposition", "attachment;filename="+fileDisplay);
	try {
		ServletOutputStream out = response.getOutputStream();
		File file = new File(realPath,fileName);
		FileInputStream in = new FileInputStream(file);
		byte[] b = new byte[1024];
		int len = -1;
		while ((len = in.read(b)) != -1) {
			out.write(b, 0, len);
		}
		out.flush();
		in.close();
		out.close();
	} catch (Exception e) {
		e.printStackTrace();
	}
	
	//注意下载之后就不能使用request跳转了,因为response已经返回了
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
		throws ServletException, IOException {
	doGet(req, resp);
}

}
在这里插入图片描述在这里插入图片描述在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值