文件上传下载
来源:互联网 发布:济南行知小学怎么样 编辑:程序博客网 时间:2024/06/16 18:11
一、文件上传
Upload.html
<formaction="upload"method="post" enctype="multipart/form-data"><inputtype="file"name="file"><inputtype="submit"value="上传"></form>
http://commons.apache.org/proper/commons-fileupload/using.html
UploadServlet.java
使用 apache 提供的 commons-io 和 commons-fileupload 包
package com.keving.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.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;/* * 文档的代码 */public class UploadServlet02 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取上下文路径 String path = req.getServletContext().getRealPath("/"); // System.out.println(path); // 1、创建文件条目工厂 DiskFileItemFactory factory = new DiskFileItemFactory(); // 2、设置缓存大小 factory.setSizeThreshold(3 * 1024); // 3、设置临时目录,该步骤可以省略 File temp = new File(path, "temp"); if (!temp.exists()) { temp.mkdirs(); } factory.setRepository(temp); // 4、上传处理 ServletFileUpload upload = new ServletFileUpload(factory); // 5、最大限制 upload.setFileSizeMax(3 * 1024 * 1024); upload.setHeaderEncoding("utf-8"); try { List<FileItem> items = upload.parseRequest(req); if (null != items) { for (FileItem item : items) { // 如果不是普通表单并且已选择上传内容则处理 if (!item.isFormField() && item.getName() != null && !item.getName().equals("")) { String fileName = item.getName(); // String filePath = path + "/upload/"+fileName; File uploader = new File(path + "/upload/"); if (!uploader.exists()) { uploader.mkdirs(); } item.write(new File(uploader, fileName)); } } } } catch (FileUploadException e) { // TODO Auto-generated catch block } catch (Exception e) { // TODO Auto-generated catch block } }}
二、文件下载
文件的下载有两种方式:
⑴利用超链接的方式下载
缺点: 只有不认识的内容即浏览器不能直接打开的内容浏览器会自动下载;当浏览器
碰见自己能认识的/能打开的内容时,就会直接显示出来
⑵利用第三方下载方式
①获取要下载的文件名
②相对路径转绝对路径
③向响应的头部添加信息
download.html
<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><a href="img/dog.jpg">jpg</a><a href="bigdownload?filename01=007.pdf">download</a></body></html>
BigFileDownloadServlet
String filename = request.getParameter("filename01");// String filename = request.getParameter("007.pdf"); System.out.println(filename); String path = request.getServletContext().getRealPath("/img/"+filename); response.setHeader("content-disposition", "attachment;fielname="+filename); File file = new File(path); if(file.exists()){ FileInputStream is = new FileInputStream(file); ServletOutputStream os = response.getOutputStream(); byte[] bs = new byte[1024]; int len = -1; while(-1!=(len = (is.read(bs)))){ os.write(bs,0,len); } os.flush(); os.close(); is.close(); } else { System.out.println("文件路径找不到"); }
ImgDownloadServlet
// response.setContentType("application/x-msdownload");// response.addHeader("content-disposition","attachment;filename=dog.jpg"); response.setContentType("octet-stream"); InputStream is = request.getServletContext().getResourceAsStream("/img/dog.jpg"); BufferedInputStream input = new BufferedInputStream(is); ServletOutputStream os = response.getOutputStream(); byte[] bytes = new byte[input.available()]; input.read(bytes); os.write(bytes); input.close(); os.close();
PdfDownloadServlet
response.setContentType("application/pdf"); String path = getServletContext().getRealPath("/img/003常用对象.pdf"); System.out.println("path "+path); File file = new File(path); String filename = file.getName(); System.out.println("filename "+filename); response.setHeader("content-disposition", "attachment;filename="+URLEncoder.encode(filename,"UTF-8"));
浏览器显示图片
response.setContentType("image/png"); OutputStream os = response.getOutputStream(); String sourcePath = request.getServletContext().getRealPath("/img/dog.jpg"); InputStream is = new FileInputStream(new File(sourcePath)); byte[] bs = new byte[1024]; int len = -1; while(-1!=(len=is.read(bs))){ os.write(bs,0,len); } os.flush(); os.close(); is.close();
阅读全文
0 0
- 文件上传下载
- 文件上传下载
- 上传下载文件
- 文件上传下载
- 文件上传下载
- 文件上传下载
- 文件上传下载
- 文件上传下载
- 文件上传下载
- 上传下载文件
- 文件上传下载
- 文件上传下载
- 文件上传下载
- 上传下载文件 .
- 上传下载文件
- 文件上传下载
- 文件上传下载
- 文件上传下载
- 错误:php70w-common conflicts with php-common-5.3.3-49.el6.x86_64 You could try using --skip-broken to
- Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
- css3的animation-play-state属性实现GIF图的暂停与播放
- 全局变量的作用范围和顺序
- 【Linux】Shell 编写case in 语句
- 文件上传下载
- 面向对象图形讲解
- GCD栅栏
- 【数据库系统概念】第7章 数据库设计和E-R模型 知识总结
- Agglomerative Hierarchical Clustering(AHC)
- Android 测试
- HTML常用的jquery操作-yellowcong
- [USACO3.2]01串 Stringsobits
- Servlet容器与Web容器