记阿里云OSS有关图片、文件上传有过期时间的坑


前言

有关阿里云OSS有关图片上传设置过期时间的问题,困扰了我几个小时的时间,之前也不是没用过阿里OSS,但此次开发中发现原来的方法上传不了,经百度得到的代码上传之后,图片又有过期时间,这tm确实迷惑了我。
在这里插入图片描述
经过我仔细对比之前使用阿里OSS发现,我的Bucket设置的读写权限为私有
在这里插入图片描述
在这里插入图片描述
修改回公共读后就不需要设置过期时间了
在这里插入图片描述
希望各位小伙伴别再遇到我这样的问题了!

在这里插入图片描述


1、导入依赖

        <!--阿里云OSS-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.10.2</version>
        </dependency>

        <!-- 日期工具栏依赖 -->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.3</version>
        </dependency>

2、想要设置过期时间

Bucket的读写权限要设置为私有

在这里插入图片描述

@Service
public class OssServiceImpl implements OssService {
    
    

	//inputStream:文件的输入流file.getInputStream();
	//module:指定的文件夹
	//originalFilename:文件名称即file.getOriginalFilename()
    @Override
    public String uploadFileAvatar(InputStream inputStream,String module,String originalFilename) {
    
    
        //工具类获取值
        String endpoint = ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        String folder = new DateTime().toString("yyyy/MM/dd");
        String fileName = UUID.randomUUID().toString();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        // oss中的文件夹名
        String objectName = module + "/" + folder + "/" + fileName + fileExtension;

        // 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentType("image/jpg");
        // 文件上传
        ossClient.putObject(bucketName, objectName, inputStream,objectMetadata);
        // 设置URL过期时间为1小时。
        Date expiration = new Date(System.currentTimeMillis() + 3600 * 100000);
       
        String url = ossClient.generatePresignedUrl(bucketName, objectName, expiration).toString();

        return url;
    }
}

3、不想设置过期时间

Bucket的读写权限要设置为公共读

在这里插入图片描述

@Service
public class OssServiceImpl implements OssService {
    
    

	//inputStream:文件的输入流file.getInputStream();
	//module:指定的文件夹
	//originalFilename:文件名称即file.getOriginalFilename()
    @Override
    public String uploadFileAvatar(InputStream inputStream,String module,String originalFilename) {
    
    
        //工具类获取值
        String endpoint = ConstantPropertiesUtils.END_POINT;
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;


        //创建OSS实例
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        String folder = new DateTime().toString("yyyy/MM/dd");
        String fileName = UUID.randomUUID().toString();
        String fileExtension = originalFilename.substring(originalFilename.lastIndexOf("."));
        // oss中的文件夹名
        String objectName = module + "/" + folder + "/" + fileName + fileExtension;

        // 创建上传文件的元信息,可以通过文件元信息设置HTTP header(设置了才能通过返回的链接直接访问)。
        ObjectMetadata objectMetadata = new ObjectMetadata();
        objectMetadata.setContentType("image/jpg");

        ossClient.putObject(bucketName, objectName, inputStream,objectMetadata);

        // 关闭OSSClient。
        ossClient.shutdown();

        String url = "http://"+bucketName+"."+endpoint+"/"+objectName;

        return url;
    }
}

本篇博文到此结束,觉得不错的小伙伴可以一键三连哦!,感谢支持!!!

Java学习路线目录索引

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/llllllkkkkkooooo/article/details/109557566
今日推荐