OSS 文件上传(阿里云对象存储空间)

 

文件上传

1、官方文档:

简单上传:分为流式上传和文件上传。流式上传使用InputStream作为文件的数据源。文件上传使用本地文件作为OSS文件的数据源。

https://help.aliyun.com/document_detail/84781.html?spm=a2c4g.11174283.6.944.21967da2h9PbDz

上传形式还有:表单上传、断点上传、分片上传等,文档都在路径中可找到;


 

2、jar包:

阿里云官方依赖包(看着就那么几个,其实里面东西不少,文件上传中真正用的也不算多)

https://gosspublic.alicdn.com/AliyunJavaSDK/3.10.2/javadoc/index.html?spm=a2c4g.11186623.2.11.160c6592adkTzv

第三步的代码中使用得到的主要有这么几个,这些只是那几个jar包中的几个子类:

import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;

 


3、同步上传代码:

// OSS所在服务区地址(在所购买的OSS存储对象空间信息中会有,一般也就是杭州的)
private static String endpoint="https://oss-cn-hangzhou.aliyuncs.com";
// OSS对象存储空间访问身份验证账户和密钥
private static String accessKeyId="*************";
private static String accessKeySecret="********************";
// OSS对象存储空间名
private static String bucketName="*********************";
// OSS存储空间中的文件目录
private static String fileDir = "***/***/";

private OSSClient ossClient;

public OSSUpload1() {
        ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }

/**
 * @Author qtl
 * @Description 同步上传
 * @Date 18:31 2020/10/14
 * @Param [file]
 * @return java.lang.String
 **/
public String uploadImg2Oss(MultipartFile file) {
    // 获取文件名
    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.uploadFile2OSS(inputStream, name);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return name;
}

/**
 * @Author qtl
 * @Description 上传到OSS服务器 如果同名文件会覆盖服务器上的,因此在文件命名上采用时间戳(毫秒级)来命名上传成功的文件
 * @Date 10:55 2020/9/16
 * @Param [instream, fileName]
 * @return java.lang.String
 **/
public String uploadFile2OSS(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, fileDir + fileName, instream, objectMetadata);
        ret = putResult.getETag();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (instream != null) {
                instream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
  // 这个返回值就是上传成功后在OSS文件对象存储的文件名【例:1607605931087.jpg】
    return ret;
}

上面的代码使用的是本地文件上传的形式,在使用此代码时需要有两个条件:

  1、开通OSS服务

  2、创建存储空间(文件存储路径其实也可以不用创建,直接在代码中写上路径,在上传过程中如果发现没有此目录就会自动创建);

  3、创建AccessKey


 

OSS 文件上传(阿里云对象存储空间)

上一篇:sql server中index的REBUILD和REORGANIZE


下一篇:nrm简介