JAVA 上傳圖片至阿里OSS儲存庫
阿新 • • 發佈:2018-12-22
1.建立一個工具類OSSUtil.java,程式碼如下:
package com.qyrj.util; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.PutObjectRequest; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.util.Arrays; import java.util.Iterator; import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; /** * @author YangJie * @Description:圖片上傳至阿里OSS雲庫工具類 * @Date:Created in 10:29 2018/2/2 * @Modified By: */ public class OSSUtil { private static String endpoint = "http://oss-cn-shenzhen.aliyuncs.com"; private static String accessKeyId = "XXXXXXX";//這裡是你的授權KeyId private static String accessKeySecret = "XXXXXXXXXX";//這裡是你的授權祕鑰 private static String bucketName = "qy-imageserver"; /** * OSS的資料夾名 */ private static String folder = "nmqgh/";//這裡是你存放圖片的資料夾名 private static String key = "http://qy-imageserver.oss-cn-shenzhen.aliyuncs.com/"; /** * 上傳圖片 * * @param fileName 檔名 * @param inputStream 流 */ public String uploadImageToOSS(String fileName, InputStream inputStream) { /** * 建立OSS客戶端 */ OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); try { String uuid = UUID.randomUUID().toString().replaceAll("-", ""); String[] names = fileName.split("[.]"); String name = uuid + "." + names[names.length - 1]; ossClient.putObject(new PutObjectRequest(bucketName, folder + name, inputStream)); return key + folder + name; } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); } finally { ossClient.shutdown(); } return null; } /** * 多圖上傳 */ public String[] uploadImageToOSS(String[] fileNames, InputStream[] inputStreams) { /** * 建立OSS客戶端 */ OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); try { ConcurrentLinkedQueue concurrentLinkedQueue = new ConcurrentLinkedQueue( Arrays.asList(fileNames)); ConcurrentLinkedQueue<InputStream> streamConcurrentLinkedQueue = new ConcurrentLinkedQueue<>( Arrays.asList(inputStreams)); Iterator<InputStream> inputStreamss = streamConcurrentLinkedQueue.iterator(); ConcurrentLinkedQueue c = new ConcurrentLinkedQueue(); for (Iterator<String> iterator = concurrentLinkedQueue.iterator(); iterator.hasNext() && inputStreamss.hasNext(); ) { String uuid = UUID.randomUUID().toString().replaceAll("-", ""); String[] names = iterator.next().split("[.]"); String name = uuid + "." + names[names.length - 1]; ossClient.putObject(new PutObjectRequest(bucketName, folder + name, inputStreamss.next())); c.add(key + folder + name); } return (String[]) c.toArray(new String[0]); } catch (Exception e) { e.printStackTrace(); System.err.println(e.getMessage()); } finally { ossClient.shutdown(); } return null; } /** * 刪除圖片 警告:在沒有呼叫其他方法的情況下,請呼叫closeClient方法 * * @param url URL全路徑 */ public void deleteImg(String url) { OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); if (url == null || "".equals(url)) { return; } String[] paths = url.split("[.]"); /** * 資料夾是否存在 */ if (!ossClient.doesObjectExist(bucketName, folder)) { ossClient.putObject(bucketName, folder, new ByteArrayInputStream(new byte[0])); } String[] name = paths[paths.length - 2].split("[/]"); /** * 物件是否存在 */ if (ossClient .doesObjectExist(bucketName, folder + name[name.length - 1] + "." + paths[paths.length - 1])) { /** * 刪除存在物件 */ ossClient .deleteObject(bucketName, folder + name[name.length - 1] + "." + paths[paths.length - 1]); } ossClient.shutdown(); } }
2.所需依賴jar包,我這裡用的是Maven:
<!-- oss -->
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>2.2.3</version>
</dependency>