文件上传、下载
来源:互联网 发布:淄博seo 编辑:程序博客网 时间:2024/06/07 15:29
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>upload</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>UploadServlet</display-name> <servlet-name>UploadServlet</servlet-name> <servlet-class>com.bjsxt.upload.servlet.UploadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UploadServlet</servlet-name> <url-pattern>/up</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>DownloadServlet</display-name> <servlet-name>DownloadServlet</servlet-name> <servlet-class>com.bjsxt.upload.servlet.DownloadServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>DownloadServlet</servlet-name> <url-pattern>/download</url-pattern> </servlet-mapping></web-app>
index.html
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body> <!-- 文件上传的要求 1. 表单method必须是post 2. 在表单中需要增加file组件提供选择文件 3. 对于form必须要设置enctype="multipart/form-data"来实现文件上传 application/x-www-form-urlencoded默认代表上传的内容是经过url编码的字符串,这种格式不允许传递二进制数据 --> <form action="/upload/up" method="post" enctype="multipart/form-data"> <input name="name"/> <input name="age"/> <input type="file" name="photo"/> <input type="file" name="photo1"/> <input type="submit"/> </form></body></html>
UploadServlet.java
package com.bjsxt.upload.servlet;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.PrintWriter;import java.text.SimpleDateFormat;import java.util.Date;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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/** * Servlet implementation class UploadServlet */public class UploadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public UploadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //创建文件上传的工厂类,初始化CommonFileUpload DiskFileItemFactory factory = new DiskFileItemFactory(); //利用Servlet实现文件上传的操作 ServletFileUpload upload = new ServletFileUpload(factory); try { //解析请求,返回包含文本与文件所有的信息 List<FileItem> items = upload.parseRequest(request); //对获取的每一个选项进行处理 for(FileItem fi : items){ if(fi.isFormField() == true){//判断当前的输入是不是表单的输入项 System.out.println(fi.getFieldName() + ":" + fi.getString("UTF-8")); }else{//false的时候就是文件了 System.out.println(fi.getName());//显示原始的文件名 InputStream is = fi.getInputStream();//获取文件的上传流 //文件名重名时,后上传的会把先上传的文件给覆盖掉,为了解决这种问题,采取重命名的方法解决(一班采用时间的方式比较多) SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); //进行格式化输出,将系统的时间处理一下,处理好了之后,会获取文件名fileName String fileName = sdf.format(new Date()); //获取原始文件的扩展名(后缀) substring截取 String suffix = fi.getName().substring(fi.getName().lastIndexOf(".")); //把这个流写入到目标的文件里 FileOutputStream fos = new FileOutputStream("c:/upload/" + fileName + suffix); //读文件,两个参数len , bs int len = 0; byte[] bs = new byte[1024];//每次读一个字节 while((len=is.read(bs)) != -1){//读取 != -1 表示还有数据 fos.write(bs , 0 ,len);//将读到的数据写入 } fos.close(); is.close(); response.setContentType("text/html;charset=utf-8"); //进行输出,将文件夹下的目录列出来 PrintWriter out = response.getWriter(); //拿到C:盘文件夹下的所有文件 File uploadDir = new File("c:/upload"); //拿到c:盘所有文件,返回一个数组 File[] imgs = uploadDir.listFiles(); for(File img : imgs){ //img.getName()文件名 out.println("<li><a href='/upload/download?name=" + img.getName() + "'>" + img.getName() + "</a></li>"); } } } } catch (FileUploadException e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
DownloadServlet.java
package com.bjsxt.upload.servlet;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Servlet implementation class DownloadServlet */public class DownloadServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DownloadServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //跳转的时候获取它的文件名 String name = request.getParameter("name"); //目标文件 File target = new File("c:/upload/" + name); response.setContentType("application/x-msdownload");//通知浏览器下载图片而不是打开 //设置下载框默认的文件名 response.setHeader("Content-Disposition", "attachment; filename=" + name); FileInputStream fis = new FileInputStream(target);//读取原始图片文件 OutputStream os = response.getOutputStream();//获得字节输出流 int len = 0; byte[] bs = new byte[1024]; //一边读一边写 while((len=fis.read(bs))!= -1){ os.write(bs , 0 ,len); } os.flush(); os.close(); fis.close(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(H## 标题 ##ttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}
lib
0 0
- 上传文件 | 下载文件
- 文件上传与下载----上传
- 文件上传与下载--下载
- 文件上传及下载
- 文件上传及下载
- 文件上传及下载
- 文件上传及下载
- 文件上传及下载
- 文件上传 下载
- 文件上传与下载
- ftp文件下载、上传
- JSP文件下载、上传
- Socket 上传/下载文件
- ftp上传 下载文件
- 文件上传和下载
- 文件上传和下载
- 文件上传与下载
- 上传与下载文件
- 只能有一个主构造函数
- maven资源路径问题
- RxJava操作符(六)Utility
- 文章标题poj 1107:W's Cipher (模拟)
- RxJava操作符(七)Conditional and Boolean
- 文件上传、下载
- Android推送技术研究
- RxJava操作符(八)Aggregate
- leetcode 9:Palindrome Number
- python获取今天00:00:00的时间戳
- Swift 枚举
- 112. Path Sum
- cf/Codeforces Round #364 D As Fast As Possible 数学
- Retrofit使用介绍