阿里云OSS文件上传下载

直接贴出已经使用过的工具类代码

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.GetObjectRequest;
import com.moonlight.sdk.consts.SystemConst;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author 
 * @project 
 * @Description: TODO
 * @date 2020-03-20 9:15
 */
public class OssUploadUtils {

    /**
     * 创建OSSClient
     *
     * @return
     */
    public static OSSClient getOSSClient(Map<String, String> config) {
        String endpoint = config.get("endpoint");
        String accessKeyId = config.get("accessKeyId");
        String accessKeySecret = config.get("accessKeySecret");
        // 创建OSSClient实例
        return new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 创建OSSClient
     *
     * @return
     */
    public static OSSClient getOSSClient() {
        Map<String, String> config = getConfig();
        String endpoint = config.get("endpoint");
        String accessKeyId = config.get("accessKeyId");
        String accessKeySecret = config.get("accessKeySecret");
        // 创建OSSClient实例
        return new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }


    /**
     * 关闭OSSClient
     *
     * @return
     */
    public static void closeOSSClient(OSSClient ossClient) {
        // 关闭client
        ossClient.shutdown();
    }


    private static Map<String, String> getConfig(){
        Map<String, String> config = new HashMap<>();
        config.put("endpoint", SystemConst.OSS_ENDPOINT);
        config.put("accessKeyId", SystemConst.OSS_ACCESS_KEY_ID);
        config.put("accessKeySecret", SystemConst.OSS_ACCESS_KEY_SECRET);
        config.put("bucketName", SystemConst.OSS_BUKET_NAME);
        config.put("filepath", SystemConst.OSS_OSS_PATH);
        return config;
    }

    public static Map<String, String> saveFile(Map<String, MultipartFile> map) throws Exception {
        Map<String, String> config = getConfig();
        if (config == null || map == null) {
            return null;
        }
        String bucketName = config.get("bucketName");
        String filepath = config.get("filepath");
        // 创建OSSClient实例
        OSSClient ossClient = getOSSClient(config);
        // 上传
        int size = map.size();
        System.out.println("上传文件个数" + size);
        Map<String, String> url = new HashMap<>();
        Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 100);
        for (Map.Entry entry : map.entrySet()) {
            ossClient.putObject(bucketName, filepath + entry.getKey(), new ByteArrayInputStream(((MultipartFile) entry.getValue()).getBytes()));
            url.put(entry.getKey().toString(), ossClient.generatePresignedUrl(bucketName, filepath + entry.getKey(), expiration).toString());
        }

        // 关闭client
        closeOSSClient(ossClient);
        return url;
    }

    /**
     * 根据文件名称获取文件类型后缀
     * @param url
     * @return
     */
    public static String getFileSuffix(String url) {
        if (StringUtils.isBlank(url)) {
            return null;
        }
        int index = url.lastIndexOf(".");
        if (index < 0) {
            return null;
        }
        return url.substring(index);
    }
    /**
     * 下载文件
     * @param bucketName
     * @param url
     * @return
     */
    public static void getObject(String bucketName, String url, String fileName) throws IOException {
        if (StringUtils.isBlank(url)) {
            return;
        }
        String[] array = url.split("[?]");
        String u = array[0];
        String key = getConfig().get("filepath") + u.substring(u.lastIndexOf("/") + 1);
        String suffix = getFileSuffix(u);
        fileName = fileName + suffix;
        if (StringUtils.isBlank(bucketName)) {
            bucketName = getConfig().get("bucketName");
        }
        OSSClient ossClient = getOSSClient(getConfig());
        File file = new File(fileName);
        if (!file.exists()) {
            file.createNewFile();
        }
        ossClient.getObject(new GetObjectRequest(bucketName, key), file);
        closeOSSClient(ossClient);
    }

    public static void main(String[] args) {
        String name = "accsd.jpeg";
        String a  = getFileSuffix(name);
        System.out.println(a);
    }

}

注意:oss下载只能用ossClient里面的api,用HttpUrl的方式下载是会被拦截的,就是加上了模拟浏览器的参数也不成功,然后oss的object的key值是包含filePath的,需要注意下

 

 

 

 

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
阿里云OSS(对象存储服务)提供了丰富的API和工具,可以方便地实现文件的上传和下载功能。根据提供的引用内容,以下是基于阿里云OSS实现文件上传下载的步骤: 1. 配置OSS服务:在阿里云官网上购买OSS服务,并完成相应的配置。\[1\] 2. 创建Controller层:在Controller层中,使用@RestController注解标记类,并使用@PostMapping注解标记上传文件的接口。在接口方法中,使用@ApiOperation注解添加接口的描述信息,使用@ApiImplicitParam注解指定接口参数。\[2\] 3. 实现上传功能:在Service层中,创建实现上传功能的服务类。在该类中,注入OSSUtils工具类,并实现上传文件的方法。在方法中,首先对文件类型进行检查,然后调用工具类的上传文件方法。\[3\] 4. 实现下载功能:类似地,在Service层中创建实现下载功能的服务类。在该类中,注入OSSUtils工具类,并实现下载文件的方法。在方法中,调用工具类的下载文件方法。 需要注意的是,上传和下载文件时,需要使用阿里云OSS提供的SDK或API进行操作。具体的实现步骤可以参考阿里云的文档,其中包括SDK的引入、配置OSS客户端、创建Bucket等详细步骤。 总结起来,基于阿里云OSS实现文件上传下载的步骤包括:配置OSS服务、创建Controller层、实现上传功能和下载功能,并使用阿里云OSS提供的SDK或API进行操作。 #### 引用[.reference_title] - *1* *2* *3* [在项目中使用阿里云oss实现文件上传功能](https://blog.csdn.net/m0_63445035/article/details/130417961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值