关于文件的上传

总结: 

             实际应用: 1. 实现文件的上传功能       

                                   2. 使用相对路径来将文件写到磁盘中

                                   3.  自动创建目录

                  原理:       先导入两个第三方的jar包,一个是commons-io这个jar包,一个是commons-fileupload这个jar包。

                                    (已经封装好了),将一个表单提交到一个servlet,可以获得相应的文件file的名称,和 相应的参数。然后写进某一个盘符中。

                  细节:     1.一定要用post方式提交,并且要使用enctype="multipart/form-data",表示能够接受多种提交格式。

                                   2 .接收参数的那个servlet不能用 request.getParameter("")来接收参数。

 

关键代码:
public class FileUpload extends HttpServlet {
 private File file = null;
 private File tempFile = null;
 @Override
 public void init() throws ServletException {
    file = new File(this.getServletContext().getRealPath("upload"));
    if(!file.exists()){
     file.mkdir();
    }
    tempFile = new File(this.getServletContext().getRealPath("upload\\temp"));
    if(!tempFile.exists()){
     tempFile.mkdir();
    }
 }
 public void doPost(HttpServletRequest req, HttpServletResponse res)
   throws ServletException, IOException {
  PrintWriter out = res.getWriter();
  DiskFileItemFactory factory = new DiskFileItemFactory();
  // maximum size that will be stored in memory
  factory.setSizeThreshold(4096);
  
  // 超过4096个字节的时候,就使用临时的文件夹来存储上传的文件
  factory.setRepository(tempFile);

  ServletFileUpload upload = new ServletFileUpload(factory);
  // maximum size before a FileUploadException will be thrown
  upload.setSizeMax(1000000);
  try {
   List fileItems = upload.parseRequest(req);
   Iterator iter = fileItems.iterator();
   String itemNo="";
   while (iter.hasNext()) {
    FileItem item = (FileItem) iter.next();
    // 忽略其他不是文件域的所有表单信息
    if(item.isFormField()){
     if("itemNo".equals(item.getFieldName())){
      itemNo = item.getString();
     }
    }
    if (!item.isFormField()) {
     String name = item.getName();
     long size = item.getSize();
     if ((name == null || name.equals("")) && size == 0) {
      continue;
     } 
     name = name.substring(name.lastIndexOf("\\") + 1, name.length());  //
     
     ItemsService.getInstance().modifyFileName(itemNo, name);
     //String uploadPath = req.getSession().getServletContext().getRealPath("upload")+"\\";
     //通过相对路径获得绝对路径     
     System.out.println("name====" + name);
     System.out.println(file +"\\"+name);
     item.write(new File(file +"\\"+name));
    }
   } 
   res.sendRedirect(req.getContextPath()+"/servlet/FindAllItemsServlet");
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}

 

            

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值