1. 程式人生 > >JAVA 上傳圖片至阿里OSS儲存庫

JAVA 上傳圖片至阿里OSS儲存庫

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>