精简Servlet3.0进行图片上传

4 篇文章 0 订阅

上传文件的方法就哪几种,但总感觉麻烦一点也不精简,就struts2的方法稍好一点。

下面的方法在之前写的Servlet3.0方法之上进行再次精简,应该是最易懂易用的,但是普通表单域是不能通过req.getParameter来获得(因为二进制流解析),来看看吧~



1.upload.jsp  文件上传表单

  <body>
  <div class="form" align="center">
  <form action="UploadServlet"  enctype="multipart/form-data"  method="post" >
    select:<input type="file" name="file">
    param:<input name="param"/><br/>
    <input type="submit" value="submit">
    </form>
  </div>
  </body>


2.UploadServlet.java 文件上




@WebServlet("/UploadServlet")
@MultipartConfig

public class UploadServlet extends HttpServlet{
private String filePath; //文件保存路径

private static final long serialVersionUID = 3465909202303185511L;

@Override
public void init(ServletConfig config) throws ServletException {
// TODO Auto-generated method stub
super.init(config);
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// TODO Auto-generated method stub
super.doGet(req, resp);
}


@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
// 对请求包设置编码
req.setCharacterEncoding("utf-8");
// 告知tomcat如何编码,浏览器如何解码
resp.setContentType("text/html; charset=utf-8");

//获得项目的根目录,并设计文件保存路径
filePath=getServletContext().getRealPath("/image");

// 为了简单,后面也直接就以fileName作为保存文件的名称
SimpleDateFormat dateFormat=new 
SimpleDateFormat("yyMMddHHmmss");


String fileName=dateFormat.format(new Date())+".jpg";

//获取文件类型和大小
Part part = req.getPart("file");
System.out.println(part.getContentType());
System.out.println(part.getSize());

//获得文本字段,下面方法不可行,只能解析英文和数字,中文即使编码也不行。
String param=req.getParameter("param");
System.out.println("只能中文哦:"+param);

Collection<String> headerNames = part.getHeaderNames();

// 遍历文件上传域的Header Name
for (String headerName : headerNames) {
System.out.println(headerName + "---->" + part.getHeader(headerName));


}
// 将文件保存到项目下的uploads文件夹下,为了简单这里没写判断目录是否存在及创建目录的操作,要先确保该目录已经存在
part.write(filePath + "/" + fileName);
System.out.println("文件保存在:"+filePath+fileName);
req.getRequestDispatcher("/index.jsp").forward(req, resp);
}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值