阿里云对象存储上传图片

在和一群大佬做react native项目的时候,我负责的是前端的工作。项目中有个功能涉及到图片的上传,当时还不清楚什么是对象存储。开始看官方文档,学习!GitHub中有react native 阿里云的sdk,大家有兴趣的话可以在GitHub上搜索一下。开始是前端进行对象存储的工作,这个项目进行了一段时间后,这个工作改为了后端完成(前端做这件事会暴漏key 和 secret,不安全)我向大佬要来了后台(Java实现)代码,简单把对象存储的模块剥离出来了,希望能对大家有用处吧(我只是个知识的搬运工哈哈)

需要准备的东西

可以将这些信息放在一个配置文件里面

ossclient.endPoint=oss-cn-beijing.aliyuncs.com
ossclient.accessKeyId=你的key
ossclient.accessKeySecret=你的secret
ossclient.bucketName=bucket的名字
ossclient.folder=图片存在的文件夹
编码

代码是参照阿里云官方编写的 点击查看,使用SpringBoot框架实现
源代码可以去我的 GitHub 上clone

  • 匹配信息的类,初始化
package com.skyocean.entity;

import com.aliyun.oss.OSSClient;

import java.util.ResourceBundle;

public class OSSConfigure {

    private static OSSConfigure ossConfigure;

    private String endPoint;
    private String accessKeyId;
    private String accessKeySecret;
    private String bucketName;
    private String folder;

    private OSSConfigure () {
        ResourceBundle rb = ResourceBundle.getBundle("OSSClient");
        {
            endPoint = rb.getString("ossclient.endPoint");
            accessKeyId = rb.getString("ossclient.accessKeyId");
            accessKeySecret = rb.getString("ossclient.accessKeySecret");
            bucketName = rb.getString("ossclient.bucketName");
            folder = rb.getString("ossclient.folder");
        }
    }
    private OSSConfigure (String folderNow) {
        ResourceBundle rb = ResourceBundle.getBundle("OSSClient");
        {
            endPoint = rb.getString("ossclient.endPoint");
            accessKeyId = rb.getString("ossclient.accessKeyId");
            accessKeySecret = rb.getString("ossclient.accessKeySecret");
            bucketName = rb.getString("ossclient.bucketName");
            folder = folderNow;
        }
    }

    public static OSSConfigure getOssConfigure() {
        if (ossConfigure == null) {
            synchronized (OSSConfigure.class) {
                if (ossConfigure == null) {
                    ossConfigure = new OSSConfigure();
                }
            }
        }
        return ossConfigure;
    }

    public static OSSConfigure getOssConfigureSetFolder(String folderNow) {
        if (ossConfigure == null) {
            synchronized (OSSConfigure.class) {
                if (ossConfigure == null) {
                    ossConfigure = new OSSConfigure(folderNow);
                }
            }
        }
        return ossConfigure;
    }

    public String getBucketName() {
        return bucketName;
    }

    public String getFolder() {
        return folder;
    }

    public OSSClient getOSSClient() {
        return new OSSClient(endPoint, accessKeyId, accessKeySecret);
    }
}

  • controller 层编写
package com.mgl.controller;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.mgl.entry.OSSConfigure;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Logger;

@RequestMapping("/pic")
@RestController
public class PictureController {

    @PostMapping(value = "/uploadPic")
    public Map<String, Object> uploadPic(
            HttpServletRequest request,
            String title,
            MultipartFile[] pictures,
            String description
    ) {
        Map<String,Object> map = new HashMap<>();
        System.out.println(title);
        //开始上传
        OSSClient ossClient = null;
        try {
            //得到上传到的文件夹
            OSSConfigure ossConfigure = OSSConfigure.getOssConfigureSetFolder("test/");
            //创建OSSClient
            ossClient = ossConfigure.getOSSClient();
            //判断文件夹是否存在,不存在则创建
            if (!ossClient.doesObjectExist(ossConfigure.getBucketName(), ossConfigure.getFolder())) {
                //创建文件夹
                ossClient.putObject(ossConfigure.getBucketName(), ossConfigure.getFolder(), new ByteArrayInputStream(new byte[0]));
            }
            for (MultipartFile file: pictures
                 ) {
                String fileExtension = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
                String key = ossConfigure.getFolder() +"mgl: "+ System.currentTimeMillis() + fileExtension;//key

                InputStream fileInput = file.getInputStream();
                //创建上传Object的Metadata
                ObjectMetadata metadata = new ObjectMetadata();
                //上传的文件的长度
                metadata.setContentLength(fileInput.available());
                //指定该Object被下载时的网页的缓存行为
                metadata.setCacheControl("no-cache");
                //指定该Object下设置Header
                metadata.setHeader("Pragma", "no-cache");
                //设置文件的上传名称
                metadata.setContentDisposition("mgl: filename=\"" +  System.currentTimeMillis() + "\"");

                ossClient.putObject(ossConfigure.getBucketName(), key, fileInput);
            }
            map.put("msg","success !");
        } catch (IOException e) {
            e.printStackTrace();
            map.put("msg","failed !");
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
        return map;
    }
    
}

  • 测试
    在这里插入图片描述
    在这里插入图片描述
    好了,大功告成,希望能帮到大家,嘿嘿。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值