JavaWeb文件上传、下载

JAVA WEB文件上传步骤如下:
 实现 Web 开发中的文件上传功能,两个操作:在 Web 页面添加上传输入项,在 Servlet 中读取上传文件的数据并保存在本地硬盘中。
     1、Web 端上传文件。在 Web 页面中添加上传输入项:<input type="file"> 设置文件上传输入项时应注意:(1) 必须设置 input 输入项的 name 属性,否则浏览器将不会发送上传文件的数据。(2) 必须把 form 的 enctype 属性设为 multipart/form-data,设置该值后,浏览器在上传文件时,将把文件数据附带在 http 请求消息体中,并使用 MIME 协议对上传文件进行描述,以方便接收方对上传数据进行解析和处理。(3) 表单提交的方式要是 post
         2、服务器端获取文件。如果提交表单的类型为 multipart/form-data 时,就不能采用传统方式获取数据。因为当表单类型为 multipart/form-data 时,浏览器会将数据以 MIME 协议的形式进行描述。如果想在服务器端获取数据,那么我们必须采用获取请求消息输入流的方式来获取数据。
         3、Apache-Commons-fileupload。为了方便用户处理上传数据,Apache 提供了一个用来处理表单文件上传的开源组建。使用 Commons-fileupload 需要 Commons-io 包的支持。
         4、fileuplpad 组建工作流程
              (1)客户端将数据封装在 request 对象中。
              (2)服务器端获取到 request 对象。
              (3)创建解析器工厂 DiskFileItemFactory 。
              (4)创建解析器,将解析器工厂放入解析器构造函数中。之后解析器会对 request 进行解析。
              (5)解析器会将每个表单项封装为各自对应的 FileItem。
              (6)判断代表每个表单项的 FileItem 是否为普通表单项 isFormField,返回 true 为普通表单项。
              (7)如果是普通表单项,通过 getFieldName 获取表单项名,getString 获得表单项值。

(8)如果 isFormField 返回 false 那么是用户要上传的数据,可以通过 getInputStream 获取上传文件的数据。通过getName 可以获取上传的文件名。

javaWeb中文件下载代码试例:

public class DownLoadServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doPost(request, response);
	}

	@Override
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		response.setHeader("Content-Disposition", "attachment;filename=" + System.currentTimeMillis() + ".ppt");
		// 服务器全剧配置
		ServletContext sc = this.getServletContext();
		
		// 得到文件名字
		getName(request);

		/* Method2 */
		// InputStream fis = sc.getResourceAsStream("/ppt/chapter01.ppt");

		/* Method1 */
		// 得到文件位置
		String path = sc.getRealPath("/ppt/chapter01.ppt");
		FileInputStream fis = new FileInputStream(new File(path));

		// 文件输出流
		ServletOutputStream sos = response.getOutputStream();

		byte[] buffer = new byte[1024];
		int length = 0;
		while ((length = fis.read(buffer)) != -1) {
			sos.write(buffer, 0, length);
		}

		/* Method3 */
		// URL url = sc.getResource("/ppt/chapter01.ppt");
		// String str = url.getFile();
		// String[] arr = str.split("/");
		// //得到名字
		// System.out.println(arr[arr.length-1]);

		// 得到集合,文件夹下面的集合
		// Set set = sc.getResourcePaths("/");
		// System.out.println(set);

		// 关闭流
		sos.flush();
		fis.close();
		sos.close();
	}

	protected void getName(HttpServletRequest request) throws ServletException, UnsupportedEncodingException {
		// 得到下载文件的名字
		String fileName = request.getParameter("fileName");
		// 解码
		String name = new String(fileName.getBytes("ISO-8859-1"), "utf-8");
		// 分割文件名后缀,判断文件下载的格式
		String[] nameType = name.split("\\.");
		System.out.println(name + " === " + nameType);
	}

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值