Package com.belerweb.oss4springmvc

Source Code of com.belerweb.oss4springmvc.OssService

package com.belerweb.oss4springmvc;

import java.io.IOException;
import java.io.InputStream;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.util.Assert;
import org.springframework.web.multipart.MultipartFile;

import com.aliyun.openservices.ClientException;
import com.aliyun.openservices.oss.OSSClient;
import com.aliyun.openservices.oss.OSSErrorCode;
import com.aliyun.openservices.oss.OSSException;
import com.aliyun.openservices.oss.model.ObjectMetadata;
import com.aliyun.openservices.oss.model.PutObjectResult;
import com.belerweb.oss4springmvc.bean.OssFile;
import com.belerweb.oss4springmvc.bean.OssUploadResult;
import com.belerweb.oss4springmvc.builder.DatePathBuilder;
import com.belerweb.oss4springmvc.builder.FileNameBuilder;
import com.belerweb.oss4springmvc.builder.PathBuilder;
import com.belerweb.oss4springmvc.builder.UuidFileNameBuilder;

/**
* @author Jun
*
* OSS 服务
*/
public class OssService implements InitializingBean {

  private String endpoint;
  private String accessId;
  private String accessKey;
  private String bucket;

  private boolean detectContentType = false;

  private PathBuilder pathBuilder;
  private FileNameBuilder fileNameBuilder;

  private OSSClient ossClient;

  public OssUploadResult upload(MultipartFile file) throws IOException {
    return upload(file, createDefaultObjectMetadata(file));
  }

  public OssUploadResult upload(MultipartFile file, ObjectMetadata metadata) throws IOException {
    String fileName = fileNameBuilder.build(file.getOriginalFilename());
    OssFile ossFile = ossUpload(pathBuilder.build() + fileName, file.getInputStream(), metadata);
    ossFile.setName(fileName);
    ossFile.setOriginalName(file.getOriginalFilename());
    return new OssUploadResult(ossFile.geteTag() == null ? Constant.FAILURE : Constant.SUCCESS, ossFile);
  }

  private OssFile ossUpload(String key, InputStream inputStream, ObjectMetadata metadata) {
    OssFile result = null;
    try {
      PutObjectResult putObjectResult = ossClient.putObject(bucket, key, inputStream, metadata);
      result = new OssFile(putObjectResult.getETag());
      result.setUrl(endpoint + Constant.SLASH + bucket + Constant.SLASH + key);
      result.setSize(metadata.getContentLength());
      result.setContentType(metadata.getContentType());
    } catch (OSSException e) {
      result = new OssFile(e.getErrorCode(), e.getMessage());
      e.printStackTrace();
    } catch (ClientException e) {
      result = new OssFile(null, e.getMessage());
      e.printStackTrace();
    }
    return result;
  }

  private ObjectMetadata createDefaultObjectMetadata(MultipartFile file) {
    ObjectMetadata metadata = new ObjectMetadata();
    metadata.setContentLength(file.getSize());

    if (detectContentType) {
      // TODO
    } else {
      metadata.setContentType(file.getContentType());
    }

    return metadata;
  }

  public void setEndpoint(String endpoint) {
    this.endpoint = endpoint;
  }

  public void setAccessId(String accessId) {
    this.accessId = accessId;
  }

  public void setAccessKey(String accessKey) {
    this.accessKey = accessKey;
  }

  public void setBucket(String bucket) {
    this.bucket = bucket;
  }

  public void setPathBuilder(PathBuilder pathBuilder) {
    this.pathBuilder = pathBuilder;
  }

  @Override
  public void afterPropertiesSet() {
    if (endpoint == null) {
      endpoint = Constant.DEFAULT_OSS_ENDPOINT;
    } else if (endpoint.endsWith(Constant.SLASH)) {
      endpoint = endpoint.replaceAll("/*$", Constant.EMPTY);
    }
    Assert.hasText(accessId, "请指定accessId。\n" + Constant.API_KEY_HELP);
    Assert.hasText(accessKey, "请指定accessKey。\n" + Constant.API_KEY_HELP);
    Assert.hasText(bucket, "请指定bucket。\n" + Constant.BUCKET_HELP);

    ossClient = new OSSClient(endpoint, accessId, accessKey);
    try {
      ossClient.getBucketAcl(bucket);
      // TODO 校验ACL
    } catch (OSSException e) {
      // e.printStackTrace();
      String errorCode = e.getErrorCode();
      if (OSSErrorCode.INVALID_ACCESS_KEY_ID.equals(errorCode)) {
        Assert.isTrue(false, "请指定正确的accessId。\n" + Constant.API_KEY_HELP);
      } else if (OSSErrorCode.SIGNATURE_DOES_NOT_MATCH.equals(errorCode)) {
        Assert.isTrue(false, "请指定正确的accessKey。\n" + Constant.API_KEY_HELP);
      } else if (OSSErrorCode.NO_SUCH_BUCKET.equals(errorCode)) {
        Assert.isTrue(false, "请指定一个存在的Bucket。");
      } else {
        Assert.isTrue(false, errorCode);
      }
    } catch (ClientException e) {
      // Ignore
      e.printStackTrace();
    }

    if (pathBuilder == null) {
      pathBuilder = new DatePathBuilder();
    }

    if (fileNameBuilder == null) {
      fileNameBuilder = new UuidFileNameBuilder();
    }
  }
}
TOP

Related Classes of com.belerweb.oss4springmvc.OssService

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.