####利用file-upload工具包进行文件上传,以下代码实现操作! ! ! !

1.文件上传三要素

   提供form表单,method必须是post!

   form表单的enctype必须是multipart/form-data

   提供 input type="file" 类型长传输入

 2 实现文件上传

    导入: file-upload的jar包

 3.编写上传页面

###############################以下展示文件上传##############################################

@WebServlet("/uploadServlet")
public class UploadServlet extends HttpServlet {
    
    private static final long serialVersionUID = 1L;

    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        request.setCharacterEncoding("utf-8");
        //编写上传的代码
        //想好,要将我的内容上传到什么地方
        //1、初始化工厂
        DiskFileItemFactory factory = new DiskFileItemFactory();
        //2 、上传解析器
        ServletFileUpload fileUpload = new ServletFileUpload(factory);
        //3、判断该表单是否是上传表单
        boolean result = ServletFileUpload.isMultipartContent(request);
        //如果不是程序结束
        if(!result) {
            return;
        }
        //4、
        try {
            /*
             * 如果表单是enctype="multipart/form-data"
             * 意味着 request是不能获取到输入框的值的,所有都不能
             */
            //System.out.println(request.getParameter("name"));
            //System.out.println(request.getParameter("fileName"));
            
            // ServletContext  整个项目的环境,tomcat启动,该对象产生,最重要的作用可以获取绝对路径
            // 服务器上的   C:/sdfsdfs/sdfsd/webapps/路径名字的路径
            //    /user/local/ssdfsdf/webapps/虚拟路径名字
            String realPath = this.getServletContext().getRealPath("./");
            System.out.println(realPath);
            
            
            File fileDir = new File(realPath+"\\upload");
            if(!fileDir.exists()) {
                fileDir.mkdir();
            }
            
            realPath = realPath+"\\upload";
            
            
            
            List<FileItem> list = fileUpload.parseRequest(request);
            
            
            for (FileItem fileItem : list) {
                if(fileItem.isFormField()) { //普通输入框
                    String inputName = fileItem.getFieldName();// name
                    String value = fileItem.getString();//如果有乱码  getString("字符集的形式") "张三"
                    
                    System.out.println(inputName +","+value);
                }else {
                    String fileName = fileItem.getName();//获取文件上传的名字
                    System.out.println(fileName);
                    
                    //IO流
                    InputStream inputStream = fileItem.getInputStream();
                    
                    
                    String suffixName = fileName.substring(fileName.lastIndexOf("."));// .jpg .png  .txt
                    
                    
                    
                    //String path = "C:\\Users\\yanzhenwei\\javaee-workspace2\\JavaWeb14\\WebContent\\upload";
                    //System.out.println(realPath);
                    String newName = UUIDUtils.getUUID()+suffixName;
                    System.out.println(newName);
                    OutputStream outputStream = new FileOutputStream(new File(realPath+"\\"+newName));
                    int length = 0;
                    byte[] arr =new byte[1024*100];
                    while((length=inputStream.read(arr)) != -1) {
                        outputStream.write(arr, 0, length);
                        outputStream.flush();
                    }
                    
                    outputStream.close();
                    inputStream.close();
                    
                }
            }
        } catch (FileUploadException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}
 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值