java上传图片到阿里云OSS对象存储

之前项目的图片是上传后保存在本地E盘的,在本地运行的时候简直完美,但等到用内网穿透访问或部署到服务器上后再访问,那1M的小水管要加载半天才能加载出来图片。原本无可奈何,结果突然发现买服务器时送了6个月的40G OSS存储包,这不是美滋滋吗,赶紧把之前的图片上传进去,然后把数据库里的路径全部加上OSS域名,再一试,速度飞起。结果我发现事情没这么简单,存储包是送的,但是流量要钱的[哭]。但是数据库里路径都改了,虽然有备份,但是用OSS来访问那个速度让我不想放弃。于是用了一会儿看了看价格。访问我的项目全部页面3次,虽然流量70多Mb,但是才一分钱。本穷逼可以接受。

那就把文件上传接口改了吧。由于我只需要将图片上传到OSS,并不需要做其他删除等操作,所以还是比较简单的。

首先导入依赖

 <!--阿里上传文件到OSS存储依赖-->
        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.8.0</version>
        </dependency>

上传图片请求

@RestController
public class FileControllerToOSS {
    @PostMapping({"/upLoadImg/{type}"})
    public JSONObject upLoadImg(@RequestParam("file") MultipartFile file, @PathVariable("type") String type) throws Exception{
        if (!CheckSession.checkSession()){
            JSONObject jsonObject = new JSONObject();
            jsonObject.put("code",1);
            return jsonObject;
        } else {
            /*获取当前登录的用户id*/
            Integer userId = GetUserId.getUserId();
            String fileName = file.getOriginalFilename(); //获取原始路径
            fileName = fileName.substring(fileName.lastIndexOf("\\") + 1); //获取文件&后缀名
            String suffixName = fileName.substring(fileName.lastIndexOf(".")); //获取后缀名

            String name = userId + Now.getNowTime("yyyyMMddHHmmss")+fileName;
            String completePath = "userImages/"+ type+"/" + name;

            // Endpoint以杭州为例,其它Region请按实际情况填写。
            String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
            String accessKeyId = "";
            String accessKeySecret = "";
            InputStream inputStream = file.getInputStream();

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

// 创建PutObjectRequest对象。
//            PutObjectRequest putObjectRequest = new PutObjectRequest("", "", new File(""));

// 如果需要上传时设置存储类型与访问权限,请参考以下示例代码。
// ObjectMetadata metadata = new ObjectMetadata();
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
// metadata.setObjectAcl(CannedAccessControlList.Private);
// putObjectRequest.setMetadata(metadata);

// 上传文件。
            ossClient.putObject("", completePath, inputStream);

// 关闭OSSClient。
            ossClient.shutdown();
            String src = ""+completePath;
            JSONObject srcJson = new JSONObject();
            srcJson.put("src",src);
            JSONObject json = new JSONObject();
            json.put("code",0);
            json.put("msg","上传成功");
            json.put("data",srcJson);
//        System.out.println(json);
            return json;
        }
    }
}

官方的文档已经比较详细,这里我将自己的那些key和url等删除了,按照官方的填入自己的即可

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值