首先需要两个jar包:
下载commons-fileupload-1.2.2-bin.zip:
http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi
下载commons-io-2.11.0-bin.zip:
http://commons.apache.org/proper/commons-io/download_io.cgi
下载好之后将两个包都放入WEB-INF目录下新建的ib文件夹中,并右键单击将其“Add As Library”。
接下来,在jsp页面中,需要一个form表单。
注意以下几点:
1. form标签,method必须为post(无长度限制)
2. form标签的enctype属性值必须为multipart/form-data。表示提交的数据以多段进行拼 接, 并且以二进制的形式发送。
3. 使用type = “file” 进行文件上传。
然后开始编写服务器接收代码,处理上传的文件。创建一个继承HttpServlet的类,并在web.xml配置。

配置如下:

在jsp页面中,设置form表单的action属性值为“http://localhost:8080/TestDemo/upload”,这里的/upload对应刚刚配置的路径。
源码如下:
upload.jsp
<form action="http://localhost:8080/TestDemo/upload" method="post" enctype="multipart/form-data">
username:<input type="text" name="name"/>
<br>
<%-- 使用<input type="file"/>添加文件上传--%>
<input type="file" name="photo"/><br>
<input type="submit">
</form>
upload.java
public class upload extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
if(ServletFileUpload.isMultipartContent(req)){
//需要一个fileItemFactory实例 fileItemFactory是一个接口 因此new的是它的实现类
FileItemFactory fileItemFactory=new DiskFileItemFactory();
//创建一个用于解析上传数据的类
ServletFileUpload servletFileUpload=new ServletFileUpload(fileItemFactory);
try {
//解析上传的数据 得到每一个表单项FileItem
List<FileItem> list=servletFileUpload.parseRequest(req);
//循环判断每个表单项
for(FileItem fileItem : list){
if(fileItem.isFormField()){
//普通表单项
System.out.println("表单的name属性:"+fileItem.getFieldName());
System.out.println("表单的value属性"+fileItem.getString("UTF-8"));
}else{
//上传的文件
System.out.println("表单的name属性:"+fileItem.getFieldName());
System.out.println("上传的文件名:"+fileItem.getName());
//上传的文件写入E盘
fileItem.write(new File("e:\\"+fileItem.getName()));
}
}
} catch (FileUploadException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
运行结果如下:



下载:
需要提前将要用的图片部署在项目中:

创建一个继承HttpServlet的类,重写doGet方法 :
public class download extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取下载的文件名 这里写死
String downloadFileName="1.jpg";
//读取下载的内容
ServletContext servletContext=getServletContext();
//获取要下载的文件类型
String mimeType=servletContext.getMimeType("/img/"+downloadFileName);
System.out.println("下载的文件类型"+mimeType);
//通过响应头告诉客户端返回的数据类型
resp.setContentType(mimeType);
//告诉客户端收到的数据用于下载 如果没有这一项 图片将直接显示在页面中
resp.setHeader("Content-Disposition","attachment;filename="+downloadFileName+"");
//输入流
InputStream resourceAsStream=servletContext.getResourceAsStream("/img/"+downloadFileName);
//获取响应的输出流
OutputStream outputStream=resp.getOutputStream();
//将前者输入的流的内容读取,写给后者输出流
IOUtils.copy(resourceAsStream,outputStream);
}
}
该博客介绍了如何在Java Web环境中实现文件上传和下载功能。首先,需要引入Apache Commons FileUpload和Commons IO库,将jar包放入WEB-INF/lib目录并添加到项目类路径。在jsp页面中创建一个form表单,设置method为post和enctype为multipart/form-data,使用type=file输入框进行文件选择。在服务器端,创建一个继承自HttpServlet的类,处理上传请求,解析上传的文件并保存到指定位置。对于下载,同样创建一个Servlet,通过ServletContext获取文件内容并设置响应头以触发浏览器下载。
1441

被折叠的 条评论
为什么被折叠?



