栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用阿里云oss上传文件测试案例+上传策略包装类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

java使用阿里云oss上传文件测试案例+上传策略包装类

产品文档地址:
https://help.aliyun.com/product/31815.html
产品购买地址:
https://www.aliyun.com/search?scene=all&k=oss
在官网首先购买产品,开通oss服务后进入控制台:

在https://developer.aliyun.com/ask/2061
查看相关的endpoint地址(找到自己所在的区域)

在控制台
https://oss.console.aliyun.com/overview
查找accesskey入口:

获得自己的accessKeyId和accessKeySecret
在控制台点击新建bucket,自己定义名字

进入自己项目导入依赖:

   
        com.aliyun.oss
        aliyun-sdk-oss
        2.8.2
        
        
        com.aliyun
            aliyun-java-sdk-core
            3.2.8
        
        
            com.aliyun
            aliyun-java-sdk-dysmsapi
            1.1.0
        

新建一个单元测试:

    private String endpoint ="https://oss-cn-beijing.aliyuncs.com";//(写自己endpoint对应的地址)
    private String accessKeyId="...";
    private String secretAccessKey="...";
    private String bucketName="...";
    @Test
    public void uploadByOss() throws FileNotFoundException {
        OSSClient ossClient = new OSSClient(endpoint,accessKeyId, secretAccessKey);
        InputStream inputStream = new FileInputStream("C:\Users\14172\Pictures\0.png");
//上传图片,第一个参数为bucketName,第二个参数key为上传的文件路径名称,第三个为InputStream
        ossClient.putObject(bucketName ,"upload/" +"aa.jpg", inputStream);
        Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
// 生成URL,第一个参数为bucketName,第二个参数key为上传的文件路径名称,第三个为过期时间
        URL url = ossClient.generatePresignedUrl(bucketName ,"upload/"+"aa.jpg" , expiration);
        System.out.println(url);

    }

点击运行后可以看到文件管理中多了一个文件夹,下面有自己上传的文件:

在程序运行后得到的url点击后会跳转到网页自动下载:


点击后可以看到自己刚刚上传的文件

也可以用一个类将oss上传包装起来:

@Service
public class OssUploadStrategyImpl extends AbstractUploadStrategyImpl {
    @Autowired
    private OssConfigProperties ossConfigProperties;

    @Override
    public Boolean exists(String filePath) {
        return getOssClient().doesObjectExist(ossConfigProperties.getBucketName(), filePath);
    }

    @Override
    public void upload(String path, String fileName, InputStream inputStream) {
        getOssClient().putObject(ossConfigProperties.getBucketName(), path + fileName, inputStream);
    }

    @Override
    public String getFileAccessUrl(String filePath) {
        return ossConfigProperties.getUrl() + filePath;
    }

    
    private OSS getOssClient() {
        return new OSSClientBuilder().build(ossConfigProperties.getEndpoint(), ossConfigProperties.getAccessKeyId(), ossConfigProperties.getAccessKeySecret());
    }

}

在yml文件中写oss配置:

upload:
  mode: oss
  oss:
    url: https://OSS域名/
    endpoint: oss-cn-beijing-.aliyuncs.com
    accessKeyId: ..
    accessKeySecret: ..
    bucketName: ..

获得配置文件的值:

@Data
@Configuration
@ConfigurationProperties(prefix = "upload.oss")
public class OssConfigProperties {

    
    private String url;
    private String endpoint;

    
    private String accessKeyId;

    
    private String accessKeySecret;
    private String bucketName;

}

上传策略抽象类:

@Service
public abstract class AbstractUploadStrategyImpl {

    @Override
    public String uploadFile(MultipartFile file, String path) {
        try {
            // 获取文件md5值
            String md5 = FileUtils.getMd5(file.getInputStream());
            // 获取文件扩展名
            String extName = FileUtils.getExtName(file.getOriginalFilename());
            // 重新生成文件名
            String fileName = md5 + extName;
            // 判断文件是否已经上传
            if (!exists(path + fileName)) {
                upload(path, fileName, file.getInputStream());
            }
            return getFileAccessUrl(path + fileName);
        } catch (Exception e) {
            e.printStackTrace();
            throw new BizException("文件上传失败");
        }
    }
      public abstract Boolean exists(String filePath);
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/327691.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号