阿里云 OSS 对象存储简单使用【随笔】

Aliyun OSS 对象存储的使用

官方文档:https://help.aliyun.com/document_detail/32008.html?spm=a2c4g.11186623.6.916.57fc6d39qyXFck

准备工作

一、首先开通阿里云 OSS 对象存储,并创建 Bucket 列表

20201119100635300

二、创建完成后,点击进入 Bucket,在概览中可以看到外网访问地址 与 内网访问地址;若是本地开发测试可以使用外网地址,若是部署到服务器上的生产环境建议使用内网地址;内网地址上传速度远超外网且可以降低服务器的宽带需求。

20201119100906131

三、进入文件管理,可以添加文件上传目录的分类,如下面我根据不同格式的文件进行分类。

20201119101450736

四、权限管理页面可以设置防盗链等。

20201119101832291

五、基础设置下面的生命周期可以设置文件存储的有效期,过期后会执行删除或转换存储类型。

20201119102046557

六、传输管理下的域名管理可以将域名绑定到当前 Bucket 下,绑定后即可使用我们自己的域名访问 OSS;另外还可开启传输加速加快文件的传输速度【注意这个是需要收费的】。

20201119104747354

七、创建一个单独赋予 OSS 权限的用户。鼠标移到我们的头像上,点击 RAM 访问控制;用户 --> 创建用户;点击创建的用户并设置权限,并创建 AccessKey

20201119105047725

20201119105240055

20201119105326820

编码实现

导入 pom 依赖

<!--aliyun oss-->
<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.10.2</version>
</dependency>

<!--aliyun core-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.5.6</version>
</dependency>

创建 config.properties 配置文件

# 阿里云OSS用户密钥ID
oss.accessKeyID=前面创建的 AccessKey
# 阿里云OSS用户密钥
oss.accessKeySecret=前面创建的 AccessKeySecret
# 外网访问
oss.networkAccess=外网访问地址【主要用户生成上传文件的访问地址】
# 上传节点(外网)
oss.endpoint=上传节点【若是测试使用外网上传,若是生产环境使用内网上传】
# 上传节点 (内网)
#oss.endpoint=

创建 oss 工具类

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.comm.Protocol;
import lombok.extern.slf4j.Slf4j;

import java.io.IOException;
import java.util.Properties;

/**
 * @author akieay
 * @Date: 2020/11/19 0:30
 */
@Slf4j
public class OssConnectionUtil {

    /**
     * 阿里云OSS用户密钥ID
     */
    private static String accessKeyID;
    /**
     * 阿里云OSS用户密钥
     */
    private static String accessKeySecret;
    /**
     * 阿里云OSS外网访问节点
     */
    private static String networkAccess;
    /**
     *  OSS 上传访问节点
     */
    private static String endpoint;


    static {
        Properties prop = new Properties();
        try {
            prop.load(Object.class.getResourceAsStream("/config.properties"));
            accessKeyID = prop.getProperty("oss.accessKeyID");
            accessKeySecret = prop.getProperty("oss.accessKeySecret");
            networkAccess = prop.getProperty("oss.networkAccess");
            endpoint = prop.getProperty("oss.endpoint");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 获取OSS实例对象
     * @return
     */
    public static OSS getOssClientInstance(){
        OSS ossClient = null;
        try {
            // 创建ClientConfiguration。ClientConfiguration是OSSClient的配置类,可配置代理、连接超时、最大连接数等参数。
            ClientBuilderConfiguration conf = new ClientBuilderConfiguration();

            // 设置OSSClient允许打开的最大HTTP连接数,默认为1024个。
            conf.setMaxConnections(200);
            // 设置Socket层传输数据的超时时间,默认为50000毫秒。
            conf.setSocketTimeout(10000);
            // 设置建立连接的超时时间,默认为50000毫秒。
            conf.setConnectionTimeout(10000);
            // 设置从连接池中获取连接的超时时间(单位:毫秒),默认不超时。
            conf.setConnectionRequestTimeout(1000);
            // 设置连接空闲超时时间。超时则关闭连接,默认为60000毫秒。
            conf.setIdleConnectionTime(10000);
            // 设置失败请求重试次数,默认为3次。
            conf.setMaxErrorRetry(5);
            // 设置是否支持将自定义域名作为Endpoint,默认支持。
            conf.setSupportCname(true);
            // 设置是否开启二级域名的访问方式,默认不开启。
//        conf.setSLDEnabled(true);
            // 设置连接OSS所使用的协议(HTTP或HTTPS),默认为HTTP。
            conf.setProtocol(Protocol.HTTP);
            // 设置用户代理,指HTTP的User-Agent头,默认为aliyun-sdk-java。
//        conf.setUserAgent("aliyun-sdk-java");
            // 设置代理服务器端口。
//        conf.setProxyHost("<yourProxyHost>");
            // 设置代理服务器验证的用户名。
//        conf.setProxyUsername("<yourProxyUserName>");
            // 设置代理服务器验证的密码。
//        conf.setProxyPassword("<yourProxyPassword>");
            // 设置是否开启HTTP重定向,默认开启。
            conf.setRedirectEnable(true);
            // 设置是否开启SSL证书校验,默认开启。
            conf.setVerifySSLEnable(true);
            ossClient = new OSSClientBuilder().build(endpoint, accessKeyID, accessKeySecret, conf);

        } catch (Exception e) {
            log.error("初始化client失败!exception:" + e.getMessage());
        }

        return ossClient;
    }

    /**
     * 获取OSS外网访问域名
     * @return
     */
    public static String getOssNetworkAccess(){
        return networkAccess;
    }
}

创建 OSS 常量类

/**
 * 阿里云 oss对象存储通用常量封装
 * @author akieay
 */
public class OssConstant {

    /**
     * 创建的 Bucket 名称
     */
    public static String CLOUDPRINT_FILE_BUCKET = "cloud-test";

    /**
     * word文件存储目录
     */
    public static String WORD_DIRECTORY = "cloudprint/word/";
    /**
     * excel文件存储目录
     */
    public static String EXCEL_DIRECTORY = "cloudprint/excel/";
    /**
     * ppt文件存储目录
     */
    public static String PPT_DIRECTORY = "cloudprint/ppt/";
    /**
     * pdf文件存储目录
     */
    public static String PDF_DIRECTORY = "cloudprint/pdf/";
    /**
     * txt文件存储目录
     */
    public static String TXT_DIRECTORY = "cloudprint/txt/";
    /**
     * prn 文件存储目录
     */
    public static String PRN_DIRECTORY = "cloudprint/prn/";
    /**
     * image 文件存储目录
     */
    public static String IMAGE_DIRECTORY = "cloudprint/image/";
    /**
     * img-pdf 文件存储目录
     */
    public static String IMG_PDF_DIRECTORY = "cloudprint/img-pdf/";

    /**
     * 授权URL访问的有效期(毫秒) 默认1小时
     */
    public static Integer AUTH_URL_PERIOD_VALIDITY = 3600 * 1000;
}

创建 OSS API 工具类

import com.akieay.cloudprint.common.util.FileUtil;
import com.akieay.cloudprint.common.util.aliyun.oss.connection.OssConnectionUtil;
import com.aliyun.oss.HttpMethod;
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.*;

import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import static com.aliyun.oss.internal.OSSConstants.DEFAULT_OBJECT_CONTENT_TYPE;


/**
 * @author akieay
 */
public class OssManagerApi {

    public static OSS ossClient;
    static {
        ossClient = OssConnectionUtil.getOssClientInstance();
    }

    /**********************************************************存储空间管理************************************/


    /**
     * 创建存储空间
     * @param bucketName 存储空间名称
     */
    public static void createBucket(String bucketName){
        // 创建CreateBucketRequest对象。
        CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);

        // 如果创建存储空间的同时需要指定存储类型以及数据容灾类型, 可以参考以下代码。
        // 此处以设置存储空间的存储类型为标准存储为例。
        // createBucketRequest.setStorageClass(StorageClass.Standard);
        // 默认情况下,数据容灾类型为本地冗余存储,即DataRedundancyType.LRS。如果需要设置数据容灾类型为同城冗余存储,请替换为DataRedundancyType.ZRS。
        // createBucketRequest.setDataRedundancyType(DataRedundancyType.ZRS)

        // 创建存储空间。
        ossClient.createBucket(createBucketRequest);
    }

    /**
     * 列举所有存储空间
     * @return
     */
    public static List<Bucket> listBuckets(){
        // 列举存储空间。
        return ossClient.listBuckets();
    }

    /**
     * 判断存储空间是否存在
     * @param bucketName 存储空间名称
     * @return
     */
    public static boolean bucketExists(String bucketName){
        return ossClient.doesBucketExist(bucketName);
    }

    /**
     * 删除存储空间
     * @param bucketName 存储空间名称
     */
    public static void removeBucket(String bucketName){
        ossClient.deleteBucket(bucketName);
    }




    /******************************************************上传文件到指定的存储空间(bucketName)并将其保存为指定的文件名称(fileName)。************/

    /**
     * 简单上传-流式上传-【上传字符串】
     * 上传文件到OSS时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg。
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param content  文件内容[String格式]
     */
    public static void simplyUploadString(String bucketName, String objectName, String content){
        simplyUploadByteArray(bucketName, objectName, content.getBytes());
    }

    /**
     * 简单上传-流式上传-【上传byte数组】
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param content  文件内容[byte数组]
     */
    public static void simplyUploadByteArray(String bucketName, String objectName, byte[] content){
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content));
//        如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
//        ObjectMetadata metadata = new ObjectMetadata();
//        metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
//        metadata.setObjectAcl(CannedAccessControlList.Private);
//        putObjectRequest.setMetadata(metadata);
        ossClient.putObject(putObjectRequest);
    }

    /**
     * 简单上传-流式上传-【上传网络流】
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param url  网络文件url路径
     */
    public static void simplyUploadFlowNetwork(String bucketName, String objectName, String url) throws Exception {
        InputStream inputStream = new URL(url).openStream();
        ossClient.putObject(bucketName, objectName, inputStream);
    }

    /**
     * 简单上传-流式上传-【上传文件流】
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param file 需要上传的文件对象
     */
    public static void simplyUploadFile(String bucketName, String objectName, File file) throws FileNotFoundException {
        InputStream inputStream = new FileInputStream(file);
        ossClient.putObject(bucketName, objectName, inputStream);
    }

    /**
     * 简单上传-文件上传
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param filePath 本地文件路径
     */
    public static void simplyUploadFile(String bucketName, String objectName, String filePath){
        Map<String, String> tags = new HashMap<String, String>();
        tags.put("tag", "cloudprint");
        // 在HTTP header中设置标签信息。
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setObjectTagging(tags);

        // 创建PutObjectRequest对象。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath), metadata);
        ossClient.putObject(putObjectRequest);
    }

    /**
     * 简单上传-文件上传【存在回调函数】
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param filePath 本地文件路径
     * @param callback 回调对象
     */
    public static void simplyUploadFile(String bucketName, String objectName, String filePath, Callback callback){
        Map<String, String> tags = new HashMap<String, String>();
        tags.put("tag", "cloudprint");
        // 在HTTP header中设置标签信息。
        ObjectMetadata metadata = new ObjectMetadata();
        metadata.setObjectTagging(tags);
        // 创建PutObjectRequest对象。
        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new File(filePath), metadata);
        if(null != callback){
            putObjectRequest.setCallback(callback);
        }
        ossClient.putObject(putObjectRequest);
    }

    /**
     * 追加上传文件
     * @param bucketName 存储空间名称
     * @param objectName  文件名称【全路径】
     * @param file 文件对象
     * @param position  文件追加位置 第一次为0
     * @return 下一次需要追加的文件的开始位置
     */
    public static long additionalUploadFile(String bucketName, String objectName, File file, long position) {
        AppendObjectRequest appendObjectRequest = new AppendObjectRequest(bucketName, objectName, file);
        // 设置文件的追加位置。
        appendObjectRequest.setPosition(position);
        AppendObjectResult appendObjectResult = ossClient.appendObject(appendObjectRequest);
        return appendObjectResult.getNextPosition();
    }

    /**
     *  使用签名URL临时授权文件上传
     * @param bucketName 存储空间名称
     * @param objectName 文件名称【全路径】
     * @return 授权URL 字符串
     */
    public static String getSignatureUrl(String bucketName, String objectName) {
        GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.PUT);
        // 设置URL过期时间为1小时。
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 1000);
        request.setExpiration(expiration);
        // 设置ContentType。
        request.setContentType(DEFAULT_OBJECT_CONTENT_TYPE);
        // 设置自定义元信息。
        request.addUserMetadata("token", "file_upload");
        // 生成签名URL。
        URL signedUrl = ossClient.generatePresignedUrl(request);
        return signedUrl.toString();
//        URL sto = new URL(signedUrl.toString());
//        System.out.println("上传签名URL: "+signedUrl.toString());
//
//        Map<String, String> requestHeaders = new HashMap<String, String>();
//        requestHeaders.put(HttpHeaders.CONTENT_TYPE, DEFAULT_OBJECT_CONTENT_TYPE);
//        requestHeaders.put(OSS_USER_METADATA_PREFIX + "token", "file_upload");
//        // 使用签名URL上传文件。
//        ossClient.putObject(sto, new ByteArrayInputStream("Hello OSS LLL".getBytes()), -1, requestHeaders, true);
//        // 关闭OSSClient。
//        ossClient.shutdown();
    }



    /********************************************下载文件;从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg******************/


    /**
     * 下载到本地文件
     * @param bucketName 存储空间名称
     * @param objectName  需要下载的文件名称 【全路径】
     * @param localFile  下载后保存到本地的文件名称【全路径】
     */
    public static void downloadLocalFile(String bucketName, String objectName, String localFile) {
        // 下载OSS文件到本地文件。如果指定的本地文件存在会覆盖,不存在则新建。
        ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(localFile));
    }

    /**
     * 下载文件;从OSS下载文件时需要指定包含文件后缀在内的完整路径,例如abc/efg/123.jpg
     * @param bucketName 存储空间名称
     * @param fileName  需要下载的文件名称 【全路径】
     * @param localFile  下载后保存到本地的文件名称【全路径】
     */
    public static File downloadFile(String bucketName, String fileName, String localFile) {
        // 调用ossClient.getObject返回一个OSSObject实例,该实例包含文件内容及文件元信息。
        OSSObject ossObject = ossClient.getObject(bucketName, fileName);
        // 调用ossObject.getObjectContent获取文件输入流,可读取此输入流获取其内容。
        InputStream content = null;
        try {
            content = ossObject.getObjectContent();
            if (null != content) {
                File file = new File(localFile);
                FileUtil.inputStreamToFile(content, file);
                return file;
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != content) {
                    content.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }


    /*******************************************管理文件***************************************************************/

    /**
     * 判断文件是否存在
     * @param bucketName 存储空间名称
     * @param objectName 文件名称
     * @return
     */
    public static boolean fileExists(String bucketName, String objectName){
       return ossClient.doesObjectExist(bucketName, objectName);
    }

    /**
     * 删除文件
     * @param bucketName 存储空间名称
     * @param objectName 文件名称
     */
    public static void removeFile(String bucketName, String objectName){
        ossClient.deleteObject(bucketName, objectName);
    }



    /************************************************************************************************/

    /**
     * 获取上传文件的访问url【默认存储空间】
     * @param filePath
     * @return
     */
    public static String getDefaultUploadFileUrl(String filePath){
        return OssConnectionUtil.getOssNetworkAccess()+"/"+filePath;
    }

}

创建 OSS 业务处理类,注意业务处理类按自己的需求编写

import com.akieay.cloudprint.common.util.aliyun.oss.api.OssManagerApi;
import com.akieay.cloudprint.common.util.aliyun.oss.constant.OssConstant;

/**
 * @author akieay
 */
public class OssService {

    /**
     * 上传本地word源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalWordFile(String fileName, String sourceFile){
        String objectName = OssConstant.WORD_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地excel源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalExcelFile(String fileName, String sourceFile){
        String objectName = OssConstant.EXCEL_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地ppt源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalPptFile(String fileName, String sourceFile){
        String objectName = OssConstant.PPT_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地pdf源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalPdfFile(String fileName, String sourceFile){
        String objectName = OssConstant.PDF_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地txt源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalTxtFile(String fileName, String sourceFile){
        String objectName = OssConstant.TXT_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile 本地源文件全路径
     * @param type 文件后缀名
     * @return 文件在阿里云上的存储目录
     */
    public static String uploadLocalFile(String fileName, String sourceFile, String type){
        switch (type){
            case ".doc":
            case ".docx":
                return uploadLocalWordFile(fileName, sourceFile);
            case ".xls":
            case ".xlsx":
                return uploadLocalExcelFile(fileName, sourceFile);
            case ".ppt":
            case ".pptx":
                return uploadLocalPptFile(fileName, sourceFile);
            case ".pdf":
                return uploadLocalPdfFile(fileName, sourceFile);
            case ".txt":
                return uploadLocalTxtFile(fileName, sourceFile);
            case ".jpg":
                return uploadLocalImageFile(fileName, sourceFile);
            default:
                return null;
        }
    }


    /**
     * 上传本地prn源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalPrnFile(String fileName, String sourceFile){
        String objectName = OssConstant.PRN_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地image源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalImageFile(String fileName, String sourceFile){
        String objectName = OssConstant.IMAGE_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }

    /**
     * 上传本地image的pdf文件源文件到 阿里云
     * @param fileName 保存到阿里云的文件名称
     * @param sourceFile  本地源文件全路径
     * @return String 文件在阿里云上的存储目录
     */
    public static String uploadLocalImgPdfFile(String fileName, String sourceFile){
        String objectName = OssConstant.IMG_PDF_DIRECTORY + fileName;
        OssManagerApi.simplyUploadFile(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName, sourceFile);
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }


    /**
     * 获取image文件上传临时授权的 url
     * @param fileName image文件名称
     * @return image 临时授权的url
     */
    public static String getImageSignatureUrl(String fileName){
        String objectName = OssConstant.IMAGE_DIRECTORY + fileName;
        return OssManagerApi.getSignatureUrl(OssConstant.CLOUDPRINT_FILE_BUCKET, objectName);
    }






    /**
     * 删除 image 文件存储目录 的指定名称的文件
     * @param fileName 文件名称
     */
    public static void removeImageFile(String fileName){
        OssManagerApi.removeFile(OssConstant.CLOUDPRINT_FILE_BUCKET, OssConstant.IMAGE_DIRECTORY + fileName);
    }

    /**
     * 获取文件在 aliyun 的访问目录url
     * @param fileName 文件名
     * @param fileName 文件存储目录
     * @return 阿里云访问url
     */
    public static String getPrnFileUrl(String fileName, String fileDir){
        String objectName = fileDir + fileName;
        return OssManagerApi.getDefaultUploadFileUrl(objectName);
    }
}

测试 OSS 上传

import com.akieay.cloudprint.common.util.aliyun.oss.OssService;

public class Test {

    public static void main(String[] args) throws Exception {

        String url = OssService.uploadLocalPdfFile("tes-tword-upload.pdf", "C:\\Users\\admin\\Desktop\\pdf\\tes-tword-upload.pdf");
        System.out.println(url);

    }
}

调用上传后,即可在 OSS 文件目录下查看上传的文件

20201119110449441

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值