上传的接口:
@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;
}