文件上传与下载

一:文件的上传

(1)需要两个jar包,commons-fileupload-1.2.1.jar,commons-io-2.0.jar,点击下载密码g1rz

(2)前期准备
1). 请求方式为 POST: <form action="uploadServlet" method="post" ... >

2). 使用 file 的表单域: <input type="file" name="file"/>

3). 使用 multipart/form-data 的请求编码方式: <form action="uploadServlet" method="post" enctype="multipart/form-data">


(3)获得FileItem对象
> 简单的方式

	// Create a factory for disk-based file items
	FileItemFactory factory = new DiskFileItemFactory();
	
	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	
	// Parse the request
	List /* FileItem */ items = upload.parseRequest(request);
	
	> 复杂的方式: 可以为文件的上传加入一些限制条件和其他的属性
	
	// Create a factory for disk-based file items
	DiskFileItemFactory factory = new DiskFileItemFactory();
	
	//设置内存中最多可以存放的上传文件的大小, 若超出则把文件写到一个临时文件夹中. 以 byte 为单位
	factory.setSizeThreshold(yourMaxMemorySize);
	//设置那个临时文件夹
	factory.setRepository(yourTempDirectory);
	
	// Create a new file upload handler
	ServletFileUpload upload = new ServletFileUpload(factory);
	
	//设置上传文件的总的大小. 也可以设置单个文件的大小. 
	upload.setSizeMax(yourMaxRequestSize);
	
	// Parse the request
	List /* FileItem */ items = upload.parseRequest(request);

(4)判断是表单域还是文件域名
				if(fm.isFormField()) {
					String name =fm.getFieldName();
					String value = fm.getString();
					System.out.println(name+"11:"+value);
				//若是文件域,则把文件保存到本地硬盘中
				}else {
					String fieldName = fm.getFieldName();
					String fileName = fm.getName();
					String contentType = fm.getContentType();
					long sizeInbytes = fm.getSize();
					System.out.println("fieldName:"+fieldName);
					System.out.println("fileName:"+fileName);
					System.out.println("contentType:"+contentType);
					System.out.println("sizeInbytes:"+sizeInbytes);
					InputStream is = fm.getInputStream();
					byte[] buffer = new byte[1024];
					int len = 0;
					System.out.println("E:\\MyTemp\\"+fileName);
					OutputStream out = new FileOutputStream("e:\\MyTemp\\"+fileName);
					while((len=is.read(buffer)) !=-1 ) {
						out.write(buffer, 0, len);
					}
					out.flush();
					out.close();
					is.close();
				}


二:文件的下载

(1).  设置 contentType 响应头: 设置响应的类型是什么 ? 通知浏览器是个下载的文件


response.setContentType("application/x-msdownload"); 


(2) 设置 Content-Disposition 响应头: 通知浏览器不再有浏览器来自行处理(或打开)要下载的文件, 而由用户手工完成


response.setHeader("Content-Disposition", "attachment;filename=abc.txt");


(3)具体的文件: 可以调用 response.getOutputStream 的方式, 以 IO 流的方式发送给客户端.
		request.setCharacterEncoding("utf-8");
		String fileName = request.getParameter("fileName");
		String filePath =request.getParameter("filePath");
		response.setContentType("application/x-msdownload"); 
		response.setHeader("Content-Disposition", "attachment;filename="+URLEncoder.encode(fileName, "UTF-8"));
		InputStream in = new FileInputStream(filePath);
		OutputStream out = response.getOutputStream();
		int len=0;
		byte[] b = new byte[1024];
		while((len=in.read(b))!= -1) {
			out.write(b, 0, len);
		}
		out.close();



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
简单的利用java与js实现文件上传 package com.fendou.myString; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Iterator; 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.FileItemFactory; import org.apache.commons.fileupload.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload; public class FileUpload extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { boolean a=ServletFileUpload.isMultipartContent(request); if(a){ FileItemFactory factory=new DiskFileItemFactory(); ServletFileUpload upload=new ServletFileUpload (factory); Iterator items; try{ items=upload.parseRequest (request).iterator(); while(items.hasNext()){ FileItem item=(FileItem) items.next(); if(!item.isFormField()){ String name=item.getName (); String fileName=name.substring(name.lastIndexOf("\\")+1, name.length()); String path=request.getRealPath("file")+File.pathSeparatorChar+fileName; File uploadFile=new File (path); request.getSession ().setAttribute("file", uploadFile); item.write(uploadFile); response.setContentType ("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter out=response.getWriter(); // out.print("<font size='2'> 上传的文件为:"+name+"<br>"); // out.print("保存在服务器上 的地址为:"+path+"</font>"); } } }catch(Exception e){ e.printStackTrace(); } } response.sendRedirect("smartupload.jsp"); } }

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值