阿里云OOS上传问题

最近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()));
        }
    }
具体例子打包发在文件里面 拿下去可以直接用

猜你喜欢

转载自blog.csdn.net/weixin_39179428/article/details/80922614