java web:客户端文件上传

 

文件上传流程

1、在客户端HTML 页面通过一个表单打开一个文件,交给服务器。


表<form>标签中应指定enctype属性值为"multipart/form-data",method属性为"post",同时表单中提供一个<input type="file">作用域用于指定上传的文件。
2、服务器通过getInputSream ()获取ServletInputSteam对象。文件内容在还对象中,还包含表单域的名称和值、上传的文件名、内容类型等信息。

输入流内容:


表单提交时,浏览器将表单各个部分发送到服务器端,各部分用分隔符分开,服务器端使用Servlet可得到上传的文件并保存到特定位置。

  • @MultipartConfig

对实现文件上传的Servlet类必须使用@MultipartConfig注解,使用该注解告诉容器该Servlet能够处理multipart/form-data的请求。使用该注解,HttpServletRequest对象才可以得到表单数据的各部分。

  • 通过请求对象Request request处理上传的文件
(1)public Part getPart(String name):返回用name指定的Part对象

(2)public Collection<Part> getParts():返回所有Part对象集合
  • Part接口,表示多部分表单数据的一部分。它的函数:
(1)public InputStream getInputSttream()throws IOException:返回Part对象的输入流对象

(2)public String getContentType():返回Part对象的内容类型

(3)public String getName():返回Part对象的名称

(4)public long geiSize():返回Part对象大小

(5)public String getHeader(String name):返回Part对象指定的MIME头的值

(6)public Collection<Stringt> getHeaders(String name):返回name指定的头值的集合

(7)public Collection<Stringt> getHeaderNames():返回头值的名称集合

(8)public void delete() throws IOException:删除临时文件

(9)public void write(String fileName) throws IOException:将Part对象写到指定文件

响应重定向

Servlet分析请求后可能不直接向浏览器发送响应,而是向浏览器发送一个Location头,告诉浏览器访问其他资源。

public void sendResirect(String location)

文件上传实例:

fileLoad.jsp:

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>上传文件</title></head>
<body>
${message}<br>
<form action="FileUploadServlet" enctype="multipart/form-data" 
            method="post">
    <table>
    <tr> <td colspan="2" align="center">文件上传</td>
    </tr>
    <tr><td>会员号:</td>
       <td><input type="text" name="mnumber" size="30" /></td>
    </tr>
    <tr> <td>文件名:</td>
          <td><input type="file" name="fileName" size="30" /></td>
    </tr>
    <tr>
         <td align="right"><input type="submit" value="提交" /></td>
         <td align="left"><input type="reset" value="重置"/></td>
    </tr>
    </table>
</form>
</body>
</html>

 FileUploadServlet.java

package com;
import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;

@MultipartConfig(location="D:\\",fileSizeThreshold=1024)
public class FileUploadServlet extends HttpServlet{
	
   public void doPost(HttpServletRequest request, 
                     HttpServletResponse response) 
                throws ServletException,IOException{
       // 返回Web应用程序文档根目录  
       String path = this.getServletContext().getRealPath("/");
       String mnumber = request.getParameter("mnumber");
       Part p = request.getPart("fileName");

       String message="";
       if(p.getSize() >1024*1024){    // 上传的文件不能超过1MB大小
          p.delete();
          message = "文件太大,不能上传!";
       }else{
          path = path + "\\student\\" +mnumber;
          File f = new File(path);
          if( !f.exists()){  // 若目录不存在,则创建目录
            f.mkdirs();
       }
       String h = p.getHeader("content-disposition");
       // 得到文件名
       String fname = h.substring(h.lastIndexOf("\\")+1, h.length()-1);  
       p.write(path + "\\"+ fname);
       message = "文件上传成功!";
    }
    request.setAttribute("message", message);
    RequestDispatcher rd = request.getRequestDispatcher("/fileUpload.jsp");
    rd.forward(request, response);
  }
}

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值