从HttpServletRequest 中获取文件流转换为MultipartFile

上传的接口:

    @ApiOperation("文件上传")
    @RequestMapping("/upload")
    @ResponseBody
    public RtnInfo uploadFile(HttpServletRequest request, FormatData formData) throws IOException{
        RtnInfo rtnInfo = new RtnInfo();
        CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(request.getSession().getServletContext());
        commonsMultipartResolver.setDefaultEncoding("utf-8");
        List<Map<String,String>> pathList = new ArrayList<Map<String,String>>();
        try {
            if (commonsMultipartResolver.isMultipart(request)){
                MultipartHttpServletRequest mulReq = (MultipartHttpServletRequest) request;
                Map<String, MultipartFile> map = mulReq.getFileMap();
                String folder = "";
                // key为前端的name属性,value为上传的对象(MultipartFile)
                for (Map.Entry<String, MultipartFile> entry : map.entrySet()) {
                    //获取folder,这里folder与前端name属性对应,定义为图片的归属
                    folder=AliyunUtils.getFolder(entry.getKey());
                    //只执行一次获取到folder
                    break;
                }
                List<MultipartFile> valueList = new ArrayList<MultipartFile>(map.values());
                if(folder!=""&&!valueList.isEmpty()){
                    //将map中的MultipartFile存进数组中
                    MultipartFile[] files = new MultipartFile[valueList.size()];
                    valueList.toArray(files);
                    //上传图片文件并获取到路径集合pathList
                    pathList = AliyunUtils.uploadImages(files, folder);
                }
            }
            rtnInfo.setData(pathList);
            rtnInfo.setSystemCode(SystemCode.SUCCESS);
        } catch (IOException e) {
            rtnInfo.setSystemCode(SystemCode.ERROR_6);
            rtnInfo.setMsg(e.getMessage());
            logger.error("Exception:{}",e);
        }
        return rtnInfo;
    }

AliyunUtils工具类(oss上传):

 /**
     * 前端文件上传,多张图片
     *
     * @param files
     * @param folder oss文件夹名称
     * @return
     * @throws IOException
     */
    public static  List<Map<String,String>> uploadImages(MultipartFile[] files, String folder) throws IOException {
        List<Map<String,String>> pathList = new ArrayList<Map<String,String>>();
        for (MultipartFile file : files) {
            if (!file.isEmpty()) {
                // 初始化OSSClient
                OSSClient client = new OSSClient(endpoint, accessKeyId, accessKeySecret);

                InputStream content = file.getInputStream();

                // 创建上传Object的Metadata
                ObjectMetadata meta = new ObjectMetadata();

                // 必须设置ContentLength
                meta.setContentLength(file.getSize());
                String expandedName = "";//文件后缀名
                String fileType = file.getContentType();
                if (fileType.equals("image/pjpeg") || fileType.equals("image/jpeg")) {
                    // IE6上传jpg图片的headimageContentType是image/pjpeg,而IE9以及火狐上传的jpg图片是image/jpeg
                    expandedName = ".jpg";
                } else if (fileType.equals("image/png") || fileType.equals("image/x-png")) {
                    // IE6上传的png图片的headimageContentType是"image/x-png"
                    expandedName = ".png";
                } else if (fileType.equals("image/gif")) {
                    expandedName = ".gif";
                } else if (fileType.equals("image/bmp")) {
                    expandedName = ".bmp";
                }
                String fileName = DateUtil.getCurrentDate() + "_" + UUIDUtil.genRamonCode(6) + expandedName;// 采用时间年月日_6位随机数字的方式随即命名
                // 上传Object.
                PutObjectResult result = client.putObject(bucketName, folder + "/"
                        + fileName, content, meta);
                String path = AliyunUtils.endpoint.substring(0, 7) + AliyunUtils.bucketName + "." + AliyunUtils.endpoint.substring(7) + "/" + folder + "/" + fileName;
                Map<String,String> map = new HashMap<String,String>();
                map.put("url",path);
                pathList.add(map);
            }
        }
        return pathList;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值