最近LZ在接这个上传图片和视频已经文件,看看文档总有些模糊的地方,翻了很多资料都是坑,下面直接贴一下代码 希望你们有帮助。
public abstract class AbstractOssClientUtil {
/**图片上传阿里云域名前缀*/
private final static String URL="https://mrhs.oss-cn-hangzhou.aliyuncs.com/";
private static final String BUCKETNAME="你的桶名";
/**阿里云上传地址*/
private static final String ENDPOINT="http://oss-cn-hangzhou.aliyuncs.com";
/**阿里云账户accessKeyId*/
private static final String ACCESSKEYID="你的阿里云key";
/**阿里云账户secretAccessKey*/
private static final String SECRETACCESSKEY="你的秘钥";
/***
* 简单存入 对应 bucket 的文件 文件是按照bucketName 存放的,例如传入"fshop" 则上传的文件在 fshop 目录下, 依次类推, 目前bucketName
* 无需继续建立: 这里需要注意的是,存入规则需要开发者自定,例如是userIdMOD 5 还是其他方式,最好HASH 打散, 然后信息保存到数据库记录
* 特别要注意的是,中文的兼容性, 上传以后,中文是否做个 alias 映射 比如 '教学视频.flv'--》aliasName--jxsp20160612.flv realName 和aliasName 关系维护在数据库中 另外访问路径啥的也都写进去、
* @param inputStream输入文件流
* @param dir 文件目录, 例如 :"item/"
* @param fileName 上传文件名
* @param fileLength 文件大小
* **/
public static String putObject(InputStream inputStream,String dir, String fileName, Long fileLength) throws FileNotFoundException {
// 初始化OSSClient
OSSClient client = new OSSClient(ENDPOINT, ACCESSKEYID, SECRETACCESSKEY);
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(fileLength);
String fileNameWithDir;
if(null == dir) {
fileNameWithDir = fileName;
}else{
fileNameWithDir = dir + fileName;
}
// 上传Object. KEY 目前直接用file.getName()
PutObjectResult result = client.putObject(BUCKETNAME, fileNameWithDir, inputStream, meta);
String code=result.getETag();
//生成的URL 可以访问的URL
String returnUrl= URL + fileNameWithDir;
System.out.println("resultUri --->"+returnUrl);
// 打印ETag
System.out.println(result.getETag());
return returnUrl;
}
/***
* 简单存入 对应 bucket 的文件 文件是按照bucketName 存放的,例如传入"fshop" 则上传的文件在 fshop 目录下, 依次类推, 目前bucketName
* 无需继续建立: 这里需要注意的是,存入规则需要开发者自定,例如是userIdMOD 5 还是其他方式,最好HASH 打散, 然后信息保存到数据库记录
* 特别要注意的是,中文的兼容性, 上传以后,中文是否做个 alias 映射 比如 '教学视频.flv'--》aliasName--jxsp20160612.flv realName 和aliasName 关系维护在数据库中 另外访问路径啥的也都写进去、
* @param inputStream输入文件流
* @param dir 文件目录, 例如 :"item/"
* @param fileName 上传文件名
* @param fileLength 文件大小
* **/
public static String putObject1(InputStream inputStream,String dir, String fileName, Long fileLength) throws FileNotFoundException {
// 初始化OSSClient
OSSClient client = new OSSClient(ENDPOINT, ACCESSKEYID, SECRETACCESSKEY);
// 创建上传Object的Metadata
ObjectMetadata meta = new ObjectMetadata();
// 必须设置ContentLength
meta.setContentLength(fileLength);
String fileNameWithDir;
if(null == dir) {
fileNameWithDir = fileName;
}else{
fileNameWithDir = dir + fileName;
}
// 上传Object. KEY 目前直接用file.getName()
PutObjectResult result = client.putObject(BUCKETNAME, fileNameWithDir, inputStream, meta);
String code=result.getETag();
//生成的URL 可以访问的URL
String returnUrl= URL + fileNameWithDir;
System.out.println("resultUri --->"+returnUrl);
// 打印ETag
System.out.println(result.getETag());
return returnUrl;
}
/**
* 通过原始名称获取随机名称的图片名
* @param filieName
* @return
*/
public static String getFileName(String fileName) {
Date date = new Date(System.currentTimeMillis());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String name = simpleDateFormat.format(date);
return name + getSixNumStr()+fileName;
}
/**
* 获取六位数字随机数
* @return
*/
public static String getSixNumStr(){
Random random = new Random();
StringBuilder sb = new StringBuilder();
for(int i = 0; i < 6; i++){
sb.append(random.nextInt(10));
}
return sb.toString();
}
}
图片上传
@ApiOperation(value = "图片上传", notes = "目前提供三种上传模式,1:不传长宽值则按照原图上传,2:传长宽任意一个值,则会按照图片进行图片尺寸压缩至该尺寸,"
+ "3:长宽都传一样的值,则按照所传尺寸进行上传,注意不可传长宽两个不一样的值,则图片会被设置成非正常图片")
@ApiImplicitParams({
@ApiImplicitParam(name = "width", value = "需要传图后将图片宽度设置为该大小", required = false, dataType = "Integer", paramType = "query"),
@ApiImplicitParam(name = "height", value = "需要传图后将图片高度设置为该大小", required = false, dataType = "Integer", paramType = "query")})
@PostMapping(value = "/upload", consumes = "multipart/*", headers = "content-type=multipart/form-data")
@RequestMapping(value = "/img/upload.do", method = RequestMethod.POST)
public ResponseEntity<JsonResultEntity> upload(@ApiParam(value = "上传的文件", required = true) MultipartFile picture,
@RequestParam(value = "width", defaultValue = "0") Integer width,
@RequestParam(value = "height", defaultValue = "0") Integer height){
// 图片名称和后缀判断
if (checkPic(picture) == false) {
return ResponseEntity.ok(JsonResultUtils.error(MessageEnum.PIC_NOT_NORM.getCode(),
MessageEnum.PIC_NOT_NORM.getMessage()));
}
//将MultipartFile转为File类型方便图片转换
PicUploadVo picFileType = changeMultipartFileToFile(picture);
picFileType.setWidth(width);
picFileType.setHeight(height);
//对图片进行处理
PicUploadVo returnPicUploadVo = new PicUploadVo();
if (width == 0 && height == 0) {
//未设置长宽则按原图只是压缩
returnPicUploadVo = compressFile(picFileType);
} else if (width == 0 || height == 0) {
//未设置长宽中某一个值则对该图片对应的等比例压缩
returnPicUploadVo = proportionFile(picFileType);
} else {
//设置了长宽则对图片进行按照长宽压缩
returnPicUploadVo = squarePic(picFileType);
}
//设置上传文件的文件名
String fileName = "_" + returnPicUploadVo.getImageHeight() + "X" + returnPicUploadVo.getImageWidth() + picFileType.getFileType();
try {
String url = AbstractOssClientUtil.putObject(returnPicUploadVo.getInputStream(), FILE_PATH, AbstractOssClientUtil.getFileName(fileName), returnPicUploadVo.getSize());
return ResponseEntity.ok(JsonResultUtils.success(url, MessageEnum.AD_STATUS_OK.getCode(),
MessageEnum.AD_STATUS_OK.getMessage()));
} catch (Exception e) {
logger.error(e.getMessage());
return ResponseEntity.ok(JsonResultUtils.error(MessageEnum.PIC_UPLOAD_ERROR.getCode(),
MessageEnum.PIC_UPLOAD_ERROR.getMessage()));
}
}
具体例子打包发在文件里面 拿下去可以直接用