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

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

作者: 奥莉安娜的棒棒糖 | 来源:发表于2018-04-02 15:10 被阅读0次

    官网:: 对象存储(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成功

        }

    }

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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/admthftx.html