阿里雲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()));
}
}
具體例子打包發在檔案裡面 拿下去可以直接用 相關文章
- 火狐使用阿里雲OOS上傳圖片報錯:“XML 解析錯誤:找不到根元素”阿里XML
- [文件教程]解決sae下文件縮圖上傳問題及外掛上傳問題
- wangEditor上傳圖片問題
- 上傳App Store遇到的問題APP
- 上傳檔案超時問題
- gitlab上傳問題記錄Gitlab
- Docker環境如何配置?使用阿里雲OOS一步搞定!Docker阿里
- MaxComputeTunnel上傳典型問題場景
- 跨域CORS圖片上傳問題跨域CORS
- laravel上傳圖片路徑問題Laravel
- android 阿里雲oss上傳Android阿里
- jquery阿里雲oss 分片上傳jQuery阿里
- 阿里雲上傳多張圖片阿里
- 【檔案上傳繞過】路徑拼接問題導致上傳漏洞
- Serverless 使用阿里雲OOS將http檔案轉存到物件儲存Server阿里HTTP物件
- MaxCompute Tunnel上傳典型問題場景
- 檔案上傳需要注意的問題
- liunx下vsftpd上傳檔案問題FTP
- Docker自定義映象上傳阿里雲Docker阿里
- 有關laravel 上傳圖片訪問404的問題Laravel
- vue中檔案上傳阿里雲並獲取上傳進度Vue阿里
- 記一個 FormData 多檔案上傳問題ORM
- 上傳APP到Google Play許可權問題APPGo
- 安全漏洞問題5:上傳任意檔案
- KindEditor編輯器的圖片上傳問題
- 請教一個檔案上傳的問題
- 關於檔案上傳的問題smartUpload
- 阿里雲oss 上傳檔案的兩種方式(本地路徑上傳遠端連結上傳)阿里
- Flutter 上傳圖片到阿里雲OSSFlutter阿里
- 阿里雲 oss 檔案上傳 小坑阿里
- vue 圖片上傳到阿里雲ossVue阿里
- Spring webflux 整合 Mendmix 上傳元件上傳檔案到阿里雲騰訊雲SpringWebUX元件阿里
- 有關swoole+laravel 上傳檔案的問題Laravel
- 【Android】WebView的input上傳照片的相容問題AndroidWebView
- iOS下html上傳圖片被旋轉問題iOSHTML
- commons-fileupload-1.1.1.jar上傳的問題JAR
- canvas簽名圖片上傳及入庫問題Canvas
- 請教一個問題,關於上傳檔案和圖片的問題