上传图片文件示例(java)

1. 引入maven依赖

<!--上传文件-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>
        <!--io流-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
private String filePath="E://itripImages/img/comment/";  //文件路径
private String prefix_img="img.itrip.project.bdqn.cn/comment/";  //评论图片文件名前缀

public List<String> upLoadCommentImage(HttpServletRequest request) throws IOException, FileSizeOverException, BizFileUploadFailedException, BizFileTypeNotMatchException, BizFileCountOverException {
        System.out.println("图片上传业务处理");
        //图片路径集合
        List<String> imageUrls = new ArrayList<String>();
        //创建一个通用的多部分解析器
        CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        //判断 request 是否有文件上传,即多部分请求
        if(multipartResolver.isMultipart(request)){
            //转换成多部分request
            MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest)request;
            //文件数量
            int fileCount = multiRequest.getFileMap().size();
            /*上传的文件数不正确,必须是大于1小于等于4*/
            if(fileCount > 4 )
                throw new BizFileCountOverException();

            //取得request中的所有文件名
            Iterator<String> fileNames = multiRequest.getFileNames();
            /*循环遍历所有文件*/
            while(fileNames.hasNext()){
                //取得上传文件
                MultipartFile file = multiRequest.getFile(fileNames.next());

                if(file != null) {
                    //判断文件大小,大小不超过5M
                    if (file.getSize() >= 5 * 1024 * 1024)
                        throw new FileSizeOverException();
                    /*判断文件类型:格式为:jpg、jpeg、png*/
                    //取得当前上传文件的文件名称
                    String myFileName = file.getOriginalFilename();
                    //获取文件类型
                    String fileType = myFileName.substring(myFileName.indexOf(".") + 1);
                    /*文件类型不匹配*/
                    if(!fileType.equalsIgnoreCase("jpg")
                        && !fileType.equalsIgnoreCase("png")
                        && !fileType.equalsIgnoreCase("jpeg"))
                            throw new BizFileTypeNotMatchException();
                    /*重命名上传后的文件名*/
                    String token  = multiRequest.getHeader("token");
                    String json = redisUtil.getString(token);
                    //获取登录用户信息
                    ItripUser user = JSONObject.parseObject(json, ItripUser.class);
                    //文件名后缀
                    String suffixString = myFileName.substring(myFileName.indexOf("."));
                   //新的文件名: 命名规则:当前用户id-当前时间毫秒数-随机数
                    String fileName =user.getId()+ "-" +System.currentTimeMillis() + "-" + ((int)(Math.random()*10000000))+suffixString ;
                    //创建file对象
//                    File imageFile=new File(filePath + fileName);
                    File imageFile=new File(filePath + fileName+"_200x200.jpg");
                    //将文件写入目标路径
                    file.transferTo(imageFile);
                    //添加到图片路径集合
                    imageUrls.add(prefix_img + fileName);
                }
            }

        }
        return imageUrls;
    }
经验分享 程序员 微信小程序 职场和发展