Java SpringBoot 使用阿里云oss对图片进行上传

首先我们需要在阿里云上面注册登录,然后申请对象存储空间


        <!--阿里云对象存储 start-->
        <dependency>
           <groupId>com.aliyun.oss</groupId>
           <artifactId>aliyun-sdk-oss</artifactId>
           <version>2.5.0</version>
        </dependency> 
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.4</version>
        </dependency>

然后创建一个类,用来保存你的阿里云oss的公共参数

public class OSSClientConstants {

    //地域节点,beijing只是示例,具体根据你自己的身亲高德存储空间来填写
    public static final String ENDPOINT = "oss-cn-beijing.aliyuncs.com";
    //AccessKey ID
    public static final String ACCESS_KEY_ID  = "你的keyid";
    //Access Key Secret
    public static final String ACCESS_KEY_SECRET  = "你的keysecret";
    //仓库名称
    public static final String BACKET_NAME  = "你的唯一仓库名称";
    //仓库中的某个文件夹
    public static final String FOLDER = "avater/";
}

最后写上上传,删除,修改的工具类

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.neihan.common.NeiHanCode;

import java.io.*;
import java.net.URL;
import java.util.Calendar;
import java.util.Date;

/**
 * @Author: Manitozhang
 * @Data: 2019/1/10 14:37
 * @Email: manitozhang@foxmail.com
 *
 * 阿里云OSS文件图片上传工具类
 */
public class AliYunOssUtil {
    private static OSSClient ossClient;

    /** 上传文件到阿里云,并生成url
     * @param filedir (key)文件名(不包括后缀)
     * @param in 	文件字节流
     * @param suffix 文件后缀名
     * @return String 生成的文件url
     */
    public static String UploadToAliyun(String filedir, InputStream in, String suffix) {
        System.out.println("------------>文件名称为:  " + filedir + "." + suffix);
        ossClient  = new OSSClient(NeiHanCode.ALIYUN_OOS_ENDPOINT, NeiHanCode.ALIYUN_OOS_ACCESS_KEY_ID, NeiHanCode.ALIYUN_OOS_ACCESS_KEY_SECRET);
        URL url = null;
        try {
            // 创建上传Object的Metadata
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(in.available());
            objectMetadata.setCacheControl("no-cache");//设置Cache-Control请求头,表示用户指定的HTTP请求/回复链的缓存行为:不经过本地缓存
            objectMetadata.setHeader("Pragma", "no-cache");//设置页面不缓存
            objectMetadata.setContentType(getcontentType(suffix));
            objectMetadata.setContentDisposition("inline;filename=" + filedir + "." + suffix);
            // 上传文件
            ossClient.putObject(NeiHanCode.ALIYUN_OOS_BACKET_NAME, filedir, in, objectMetadata);

            Date expiration = null;//过期时间
            String[] split = filedir.split("/");
            if(split[0].equals("circle")){// 朋友圈图片,设置URL过期时间为3个月
                expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 90);
            }else{// 头像,设置URL过期时间为10年
                expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
            }
            // 生成URL
            url = ossClient.generatePresignedUrl(NeiHanCode.ALIYUN_OOS_BACKET_NAME, filedir, expiration);

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ossClient.shutdown();
            try {
                if (in != null) {
                    in.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return url.toString();
    }

    /**删除图片
     * @param key
     */
    public static void deletePicture(String key){
        ossClient  = new OSSClient(NeiHanCode.ALIYUN_OOS_ENDPOINT, NeiHanCode.ALIYUN_OOS_ACCESS_KEY_ID, NeiHanCode.ALIYUN_OOS_ACCESS_KEY_SECRET);
        ossClient.deleteObject(NeiHanCode.ALIYUN_OOS_BACKET_NAME, key);
        ossClient.shutdown();
    }

    /**
     * Description: 判断OSS服务文件上传时文件的contentType
     * @param suffix 文件后缀
     * @return String HTTP Content-type
     */
    public static String getcontentType(String suffix) {
        System.out.println("------------>文件格式为:  " + suffix);
        if (suffix.equalsIgnoreCase("bmp")) {
            return "image/bmp";
        } else if (suffix.equalsIgnoreCase("gif")) {
            return "image/gif";
        } else if (suffix.equalsIgnoreCase("jpeg") || suffix.equalsIgnoreCase("jpg")) {
            return "image/jpeg";
        } else if (suffix.equalsIgnoreCase("png")) {
            return "image/png";
        } else if (suffix.equalsIgnoreCase("html")) {
            return "text/html";
        } else if (suffix.equalsIgnoreCase("txt")) {
            return "text/plain";
        } else if (suffix.equalsIgnoreCase("vsd")) {
            return "application/vnd.visio";
        } else if (suffix.equalsIgnoreCase("pptx") || suffix.equalsIgnoreCase("ppt")) {
            return "application/vnd.ms-powerpoint";
        } else if (suffix.equalsIgnoreCase("docx") || suffix.equalsIgnoreCase("doc")) {
            return "application/msword";
        } else if (suffix.equalsIgnoreCase("xml")) {
            return "text/xml";
        } else if (suffix.equalsIgnoreCase("mp3")) {
            return "audio/mp3";
        } else if (suffix.equalsIgnoreCase("amr")) {
            return "audio/amr";
        } else {
            return "text/plain";
        }
    }


    //测试
    public static void main(String[] args) {
        //上传文件
        String filePath="E:\\springBootImage\\aa.png";
        long timeInMillis = Calendar.getInstance().getTimeInMillis();
        File file = new File(filePath);
        try {
            String s = UploadToAliyun(timeInMillis + file.getName(), new FileInputStream(file), "png");
            System.out.println(s);//图片路径
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }
}

具体明细可参考:

Java使用阿里云OSS对象存储上传图片

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值