springboot上傳到阿里雲oss
阿新 • • 發佈:2022-03-16
https://blog.csdn.net/allen_csdns/article/details/104515989/
Java程式碼:
匯入阿里雲的jar
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.8.3</version>
</dependency>
- 1
- 2
- 3
- 4
- 5
下面是Java後端程式碼,前端只需要用ajax上傳圖片帶上此介面就可以了。
下方程式碼直接修改引數: endpoint 、accessKeyId 、accessKeySecret 、bucketName 、homeimagedir
圖片上傳介面:
http://www.xxx.com//tool/oss/homeImageUpload
import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectResult; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.net.URL; import java.util.Date; import java.util.HashMap; import java.util.Map; import java.util.Random; @Controller @RequestMapping("/tool/oss") public class OSSClientUtil { Log log = LogFactory.getLog(OSSClientUtil.class); //阿里雲OSS地址,這裡看根據你的oss選擇 protected static String endpoint = "http://oss-cn-shenzhen.aliyuncs.com"; //阿里雲OSS賬號 protected static String accessKeyId = "xxxxxxxxxxxx"; //阿里雲OSS金鑰 protected static String accessKeySecret = "xxxxxxxxxxxx"; //阿里雲OSS上的儲存塊bucket名字 protected static String bucketName = "hx-xhd"; //阿里雲圖片檔案儲存目錄 private String homeimagedir = "xxxx/homephoto/"; private OSSClient ossClient; public OSSClientUtil() { ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 初始化 */ public void init() { ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 銷燬 */ public void destory() { ossClient.shutdown(); } /** * 圖片 上傳阿里雲oss * @param file * @return */ public String uploadHomeImageOSS(MultipartFile file) throws Exception { if (file.getSize() > 1024 * 1024 * 3) { throw new Exception("上傳圖片大小不能超過3M!"); } String originalFilename = file.getOriginalFilename(); String substring = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase(); Random random = new Random(); String name = random.nextInt(10000) + System.currentTimeMillis() + substring; try { InputStream inputStream = file.getInputStream(); this.uploadHomeImageFileOSS(inputStream, name); return name; } catch (Exception e) { throw new Exception("圖片上傳失敗"); } } /** * 獲得圖片路徑 * * @param fileUrl * @return */ public String getHomeImageUrl(String fileUrl) { if (!StringUtils.isEmpty(fileUrl)) { String[] split = fileUrl.split("/"); return this.getUrl(this.homeimagedir + split[split.length - 1]); } return null; } /** * 圖片上傳到OSS伺服器 如果同名檔案會覆蓋伺服器上的 * * @param instream 檔案流 * @param fileName 檔名稱 包括字尾名 * @return 出錯返回"" ,唯一MD5數字簽名 */ public String uploadHomeImageFileOSS(InputStream instream, String fileName) { String ret = ""; try { //建立上傳Object的Metadata ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(instream.available()); objectMetadata.setCacheControl("no-cache"); objectMetadata.setHeader("Pragma", "no-cache"); objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf(".")))); objectMetadata.setContentDisposition("inline;filename=" + fileName); //上傳檔案 PutObjectResult putResult = ossClient.putObject(bucketName, homeimagedir + fileName, instream, objectMetadata); ret = putResult.getETag(); } catch (IOException e) { log.error(e.getMessage(), e); } finally { try { if (instream != null) { instream.close(); } } catch (IOException e) { e.printStackTrace(); } } return ret; } /** * 判斷OSS服務檔案上傳時檔案的型別contentType * * @param FilenameExtension 檔案字尾 * @return String */ public static String getcontentType(String FilenameExtension) { if (FilenameExtension.equalsIgnoreCase(".bmp")) { return "image/bmp"; } if (FilenameExtension.equalsIgnoreCase(".gif")) { return "image/gif"; } if (FilenameExtension.equalsIgnoreCase(".jpeg") || FilenameExtension.equalsIgnoreCase(".jpg") || FilenameExtension.equalsIgnoreCase(".png")) { return "image/jpeg"; } if (FilenameExtension.equalsIgnoreCase(".html")) { return "text/html"; } if (FilenameExtension.equalsIgnoreCase(".txt")) { return "text/plain"; } if (FilenameExtension.equalsIgnoreCase(".vsd")) { return "application/vnd.visio"; } if (FilenameExtension.equalsIgnoreCase(".pptx") || FilenameExtension.equalsIgnoreCase(".ppt")) { return "application/vnd.ms-powerpoint"; } if (FilenameExtension.equalsIgnoreCase(".docx") || FilenameExtension.equalsIgnoreCase(".doc")) { return "application/msword"; } if (FilenameExtension.equalsIgnoreCase(".xml")) { return "text/xml"; } return "image/jpg"; } /** * 獲得url連結 * * @param key * @return */ public String getUrl(String key) { // 設定URL過期時間為10年 3600l* 1000*24*365*10 Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10); // 生成URL URL url = ossClient.generatePresignedUrl(bucketName, key, expiration); if (url != null) { return url.toString(); } return null; } /** * 判斷圖片 * @param file * @return * @throws Exception */ public String updateHomeImage(MultipartFile file) throws Exception { OSSClientUtil ossClient=new OSSClientUtil(); if (file == null || file.getSize() <= 0) { throw new Exception("圖片不能為空"); } String name = ossClient.uploadHomeImageOSS(file); String imgUrl = ossClient.getHomeImageUrl(name); return imgUrl; } //處理檔案上傳 @RequestMapping(value="/homeImageUpload", method = RequestMethod.POST) @ResponseBody public Map<String, Object> homeImageUpload(MultipartFile file) { Map<String, Object> value = new HashMap<String, Object>(); value.put("success", true); value.put("errorCode", 0); value.put("errorMsg", ""); try { String head = updateHomeImage(file);//此處是呼叫上傳服務介面 value.put("data", head); } catch (IOException e) { e.printStackTrace(); value.put("success", false); value.put("errorCode", 200); value.put("errorMsg", "圖片上傳失敗"); } catch (Exception e) { e.printStackTrace(); } return value; }
}