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;
}