阿里云对象存储上传图片 - Go语言中文社区

阿里云对象存储上传图片


在和一群大佬做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;
    }
    
}

  • 测试
    在这里插入图片描述
    在这里插入图片描述
    好了,大功告成,希望能帮到大家,嘿嘿。
版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/qq_41157658/article/details/104099454
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-06-28 03:51:47
  • 阅读 ( 1789 )
  • 分类:职场

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢