美文网首页关于工作中的技术汇总
阿里云OSS云存储简单使用

阿里云OSS云存储简单使用

作者: 帅可儿妞 | 来源:发表于2018-04-26 11:35 被阅读193次

    最近做项目的时候需要存储静态图片,但是有一个问题,我们的前台系统和后台系统采用Maven继承的方式实现,即前台系统web和后台系统mgr都依赖一个名为base的jar包,那么前后台系统的图片上传共享就出现了问题,开始我们在阿里云上搭建了一个FTP服务器,但不幸的是,我们的小程序不支持FTP的访问(表示很纳闷),所以就选择了阿里云的OSS存储,由于工期较紧所以就把上传的任务放在了服务器上,其实更好的方案是在客户端中上传,服务器只负责保存文件名。我在此小记,希望可以帮助到您。

    阿里云OSS云存简单使用步骤

    1. 开通OSS服务,并获取到如下信息:

      • ENDPOINT:访问的域名
      • ACCESSKEYID:键ID
      • ACCESSKEYSECRET:键密钥
      • BUCKETNAME:可选状态,只要权限够可以使用代码创建;
    2. 添加配置文件,把上面的信息配置在配置文件中,不多说

    3. 添加jar依赖,可以去OSS官网下载aliyun_java_sdk_yyyyMMdd.zip,其中也有各种源码文档资料示例等,如果你的项目使用Maven构建则可以使用如下Maven依赖:

      <dependency>
          <groupId>com.aliyun.oss</groupId>
          <artifactId>aliyun-sdk-oss</artifactId>
          <version>2.8.3</version>
      </dependency>
      
    4. 编写一个工具类专门处理OSS文件上传,我的文件如下:

      import java.io.File;
      import java.util.Iterator;
      import java.util.Map;
      import com.aliyun.oss.ClientException;
      import com.aliyun.oss.OSSClient;
      import com.aliyun.oss.OSSException;
      import com.aliyun.oss.model.CannedAccessControlList;
      import com.aliyun.oss.model.CreateBucketRequest;
      import com.aliyun.oss.model.PutObjectRequest;
      import lombok.extern.slf4j.Slf4j;
      
      @Slf4j
      public class OSSUtil {  
          public static final String OSS_ENDPOINT = "OSS_ENDPOINT";
          public static final String OSS_ACCESSKEYID = "OSS_ACCESSKEYID";
          public static final String OSS_ACCESSKEYSECRET = "OSS_ACCESSKEYSECRET";
          public static final String OSS_BUCKETNAME = "OSS_BUCKETNAME";
      
          public static String endpoint = PropertiesUtil.getProperty(OSS_ENDPOINT);
          public static String accesskeyId = PropertiesUtil.getProperty(OSS_ACCESSKEYID);
          public static String accesskeySecret = PropertiesUtil.getProperty(OSS_ACCESSKEYSECRET);
          public static String bucketName = PropertiesUtil.getProperty(OSS_BUCKETNAME);
      
          public static boolean uploadFile2OSS(Map<String, File> filesMap) {
              OSSClient ossClient = new OSSClient(endpoint, accesskeyId, accesskeySecret);
              try {
                  if (!ossClient.doesBucketExist(bucketName)) {
                      System.out.println("Creating bucket " + bucketName + "\n");
                      ossClient.createBucket(bucketName);
                      CreateBucketRequest createBucketRequest= new CreateBucketRequest(bucketName);
                      createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                      ossClient.createBucket(createBucketRequest);
                  }
                  log.info("#####################################开始上传...\n");
                  Iterator<String> iterator = filesMap.keySet().iterator();
                  while (iterator.hasNext()) {
                      String filename = iterator.next();
                      ossClient.putObject(new PutObjectRequest(bucketName, filename, filesMap.get(filename)));
                  }
                  log.info("#####################################上传完成\n");
                  return true;
              } catch (OSSException oe) {
                  log.error("Caught an OSSException, which means your request made it to OSS, but was rejected with an error response for some reason.");
                  log.error("Error Message: " + oe.getErrorCode());
                  log.error("Error Code: " + oe.getErrorCode());
                  log.error("Request ID: " + oe.getRequestId());
                  log.error("Host ID: " + oe.getHostId());
                  return false;
              } catch (ClientException ce) {
                  log.error("Caught an ClientException, which means the client encountered a serious internal problem while trying to communicate with OSS, such as not being able to access the network.");
                  log.error("Error Message: " + ce.getMessage());
                  return false;
              } finally {
                  ossClient.shutdown();
              }
          }
      }
      
      
    5. 在需要的地方调用工具类的方法即可如下:

      // 上传文件到OSS
      Map<String, File> fileMap = Maps.newHashMap();
      fileMap.put(filename, imgFile);
      fileMap.put(thumbnailName, thumbnailFile);
      boolean success = OSSUtil.uploadFile2OSS(fileMap);
      if (!success) {
          return ServerResponse.createErrorWithMessage("上传到OSS失败");
      }
      

    相关文章

      网友评论

        本文标题:阿里云OSS云存储简单使用

        本文链接:https://www.haomeiwen.com/subject/qcqylftx.html