图片批量上传

html批量上传图片到javaproject,然后由后台转到oss或存入本地;

其实最主要碰到的问题还是接受前端传入图片:分为单张图片上传,多个单张图片上传,和一个标签多张图片上传。

 @RequestMapping(value = "/uploadPhoto", method = RequestMethod.POST)
    @ResponseBody
    public ResultDto handleFileUpload(HttpServletRequest request) {
        ResultDto resultDto = new ResultDto();
        List<MultipartFile> files = ((MultipartHttpServletRequest) request)
                .getFiles("file");
}

接受图片的格式是MultipartFile,这个格式转file也是一个大坑。


详情可以看下这个链接,https://www.cnblogs.com/hahaxiaoyu/p/5102900.html


如果只是为了把文件数据写入目录,直接通过数据流就行,但阿里云的oss接口接受的是file格式,所以选了一个感觉靠谱一点的。

      for (int i = 0; i <files.size(); i++) {
            MultipartFile file = files.get(i);
            String str = file.getOriginalFilename();
            String[] strArray = str.split("\\.");
            String name=getPath()+"."+strArray[1];
            path = "temp/"+name;
            f = new File(path);
            try {
                FileUtils.copyInputStreamToFile(file.getInputStream(), f);
                md5key = AliyunOSSClientUtil.uploadObject2OSS(ossClient, f,name, BACKET_NAME, FOLDER);
                if(StringUtils.isNotBlank(md5key)){
                    String url="http://htaocar.oss-cn-hangzhou.aliyuncs.com/car/" + f.getName();
                    int len = addPhoto(i,carId,f.length(),url);
                    if(len>0){
                        message="上传图片成功";
                    }
                }else {
                    message = "上传出错";
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            logger.info("http://htaocar.oss-cn-hangzhou.aliyuncs.com/car/" + f.getName());
        }


通过copyInputStreamToFile在本地对应的目录里存储,然后用file再读出来,最后发给阿里云。

阿里云提供的接口是直接接受file但由于文件名是我后台自动生成的,所以改了下官网提供的接口,把文件名当参数穿进去了。


罢了,干脆把oss上传的代码也贴一下吧

   /**
     * 上传图片至OSS
     *
     * @return String 返回的唯一MD5数字签名
     */
    public static String uploadObject2OSS(OSSClient ossClient, File file,String fileName, String bucketName, String folder) {
        String resultStr = null;
        try {
            /**文件流上传方式暂定,web改成 数据流*/
            //以输入流的形式上传文件
            InputStream is = new FileInputStream(file);
//            //文件名
//            String fileName = file.getName();
            //文件大小
            Long fileSize = file.length();
            //创建上传Object的Metadata
            ObjectMetadata metadata = new ObjectMetadata();
            //上传的文件的长度
            metadata.setContentLength(is.available());
            //指定该Object被下载时的网页的缓存行为
            metadata.setCacheControl("no-cache");
            //指定该Object下设置Header
            metadata.setHeader("Pragma", "no-cache");
            //指定该Object被下载时的内容编码格式
            metadata.setContentEncoding("utf-8");
            //文件的MIME,定义文件的类型及网页编码,决定浏览器将以什么形式、什么编码读取文件。如果用户没有指定则根据Key或文件名的扩展名生成,
            //如果没有扩展名则填默认值application/octet-stream
            metadata.setContentType(getContentType(fileName));
            //指定该Object被下载时的名称(指示MINME用户代理如何显示附加的文件,打开或下载,及文件名称)
            metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");
            //上传文件   (上传文件流的形式)
            PutObjectResult putResult = ossClient.putObject(bucketName, folder + fileName, is, metadata);
            //解析结果
            resultStr = putResult.getETag();
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("上传阿里云OSS服务器异常." + e.getMessage(), e);
        }
        return resultStr;
    }




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值