idea开发Java详细代码如何使用阿里云对象存储OSS上传文件

官网:: 对象存储(Object Storage Service,简称OSS)


第一步:创建maven项目

第二步:引入依赖


第三步:创建OSSUnit类

import java.io.File;

import java.io.FileInputStream;

import java.io.InputStream;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import com.aliyun.oss.OSSClient;

import com.aliyun.oss.model.Bucket;

import com.aliyun.oss.model.OSSObject;

import com.aliyun.oss.model.ObjectMetadata;

import com.aliyun.oss.model.PutObjectResult;

public class OSSUnit {

    //log

    private static final Logger LOG = LoggerFactory.getLogger(OSSUnit.class);

    //阿里云API的内或外网域名

    private static String ENDPOINT;

    //阿里云API的密钥Access Key ID

    private static String ACCESS_KEY_ID;

    //阿里云API的密钥Access Key Secret

    private static String ACCESS_KEY_SECRET;

    //init static datas

    static{

        // endpoint以北京为例,其它region请按实际情况填写

        ENDPOINT= "oss-cn-beijing.aliyuncs.com";


        // 云账号AccessKey有所有API访问权限,建议遵循阿里云安全最佳实践,创建并使用RAM子账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建


        ACCESS_KEY_ID = "你的KEY_ID";

        ACCESS_KEY_SECRET = "你的KEY_SECRET";

    }

    /**

    * 获取阿里云OSS客户端对象

    * */

    public static final OSSClient getOSSClient(){

        return new OSSClient(ENDPOINT,ACCESS_KEY_ID, ACCESS_KEY_SECRET);

    }

    /**

    * 新建Bucket  --Bucket权限:私有

    * @param bucketName bucket名称

    * @return true 新建Bucket成功

    * */

    public static final boolean createBucket(OSSClient client, String bucketName){

        Bucket bucket = client.createBucket(bucketName);

        return bucketName.equals(bucket.getName());

    }

    /**

    * 删除Bucket

    * @param bucketName bucket名称

    * */

    public static final void deleteBucket(OSSClient client, String bucketName){

        client.deleteBucket(bucketName);

        LOG.info("删除" + bucketName + "Bucket成功");

    }

    /**

    * 向阿里云的OSS存储中存储文件  --file也可以用InputStream替代

    * @param client OSS客户端

    * @param file 上传文件

    * @param bucketName bucket名称

    * @param diskName 上传文件的目录  --bucket下文件的路径

    * @return String 唯一MD5数字签名

    * */

    public static final String uploadObject2OSS(OSSClient client, File file, String bucketName, String diskName) {

        String resultStr = null;

        try {

            InputStream is = new FileInputStream(file);

            String fileName = file.getName();

            Long fileSize = file.length();

            //创建上传Object的Metadata

            ObjectMetadata metadata = new ObjectMetadata();

            metadata.setContentLength(is.available());

            metadata.setCacheControl("no-cache");

            metadata.setHeader("Pragma", "no-cache");

            metadata.setContentEncoding("utf-8");

            metadata.setContentType(getContentType(fileName));

            metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");

            //上传文件

            PutObjectResult putResult = client.putObject(bucketName, diskName + fileName, is, metadata);

            //解析结果

            resultStr = putResult.getETag();

        } catch (Exception e) {

            LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);

        }

        return resultStr;

    }

    /**

    * 根据key获取OSS服务器上的文件输入流

    * @param client OSS客户端

    * @param bucketName bucket名称

    * @param diskName 文件路径

    * @param key Bucket下的文件的路径名+文件名

    */

    public static final InputStream getOSS2InputStream(OSSClient client, String bucketName, String diskName, String key){

        OSSObject ossObj = client.getObject(bucketName, diskName + key);

        return ossObj.getObjectContent();

    }

    /**

    * 根据key删除OSS服务器上的文件

    * @param client OSS客户端

    * @param bucketName bucket名称

    * @param diskName 文件路径

    * @param key Bucket下的文件的路径名+文件名

    */

    public static void deleteFile(OSSClient client, String bucketName, String diskName, String key){

        client.deleteObject(bucketName, diskName + key);

        LOG.info("删除" + bucketName + "下的文件" + diskName + key + "成功");

    }

    /**

    * 通过文件名判断并获取OSS服务文件上传时文件的contentType

    * @param fileName 文件名

    * @return 文件的contentType

    */

    public static final String getContentType(String fileName){

        String fileExtension = fileName.substring(fileName.lastIndexOf("."));

        if("bmp".equalsIgnoreCase(fileExtension)) return "image/bmp";

        if("gif".equalsIgnoreCase(fileExtension)) return "image/gif";

        if("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)  || "png".equalsIgnoreCase(fileExtension) ) return "image/jpeg";

        if("html".equalsIgnoreCase(fileExtension)) return "text/html";

        if("txt".equalsIgnoreCase(fileExtension)) return "text/plain";

        if("vsd".equalsIgnoreCase(fileExtension)) return "application/vnd.visio";

        if("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension)) return "application/vnd.ms-powerpoint";

        if("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension)) return "application/msword";

        if("xml".equalsIgnoreCase(fileExtension)) return "text/xml";

        return "text/html";

    }

}

第四步:创建测试类OSSUnitTest

import static org.junit.Assert.assertEquals;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import com.aa.OSSUnit;

import com.aliyun.oss.OSSClient;

import org.junit.Before;

import org.junit.Test;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

public class OSSUnitTest {

    //log

    private static final Logger LOG = LoggerFactory.getLogger(OSSUnitTest.class);

    private OSSUnit ossunit = null;

    private OSSClient client = null;

    private String bucketName = "alandbbt";//根据

    @Before

    public void initUnit(){

        ossunit = new OSSUnit();

        client = OSSUnit.getOSSClient();

    }

    @Test

    public void testCreateBucket() {

        String bucketName = "oss-test-my";

        //创建bucket

        assertEquals(true, OSSUnit.createBucket(client, bucketName));

    }

    @Test

    public void testDeleteBucket(){

        String bucketName = "oss-test-my";

        //删除bucket

        OSSUnit.deleteBucket(client, bucketName);

        //console log :删除oss-test-myBucket成功

    }

    @Test

    public void testUploadObject2OSS(){

        //上传文件

        String flilePathName = "D:/1.png";//你的文件地址

        File file = new File(flilePathName);

        String diskName = "datas/image/";//你要存放的Bucket的目录 

        String md5key = OSSUnit.uploadObject2OSS(client, file, bucketName, diskName);

        LOG.info("上传后的文件MD5数字唯一签名:" + md5key);  //上传后的文件MD5数字唯一签名:A30B046A34EB326C4A3BBD784333B017

    }

    @Test

    public void testGetOSS2InputStream(){

        //获取文件

        try {

            BufferedInputStream bis = new BufferedInputStream(OSSUnit.getOSS2InputStream(client, bucketName, "datas/image/", "preossimg.jpg"));

            String resfile = "C:/Users/Tony_tian/Desktop/csdnimg/preossimg_res.jpg";

            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(resfile)));

            int itemp = 0;

            while((itemp = bis.read()) != -1){

                bos.write(itemp);

            }

            LOG.info("文件获取成功"); //console log :文件获取成功

            bis.close();

            bos.close();

        } catch (Exception e) {

            LOG.error("从OSS获取文件失败:" + e.getMessage(), e);

        }

    }

    @Test

    public void testDeleteFile(){

        //注:文件夹下只有一个文件,则文件夹也会一起删除;如果多个文件,只会删除指定文件名的文件

        //删除文件

        OSSUnit.deleteFile(client, bucketName, "datas/image/", "1.jpg");

        //console log : 删除oss-test-my下的文件datas/image/preossimg.jpg成功

    }

}

第五步:测试成功,这里我就贴上传图片的效果


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,100评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,296评论 18 399
  • 50道经典Java编程练习题,将数学思维运用到编程中来。抱歉哈找不到文章的原贴了,有冒犯的麻烦知会声哈~ 1.指数...
    OSET我要编程阅读 6,701评论 0 9
  • Lemon_小5阅读 138评论 0 0
  • 郭相麟 沉淀很久 饱尝人情冷暖 不再迷茫 不再依附 把那诗情画意的理想 转换为现实行动的努力 只为含苞待放的来到 ...
    郭相麟阅读 98评论 0 0