目的是实现阿里云oss文件的上传:

阿里云OSS上传文件,如何通过OSS中的sdk代码OSSClient 进行本地文件的上传

1. 代码一、OSSClient 进行本地文件的上传


import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.PutObjectResult;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.IOException;
import java.io.InputStream;


public class TestOss {
    Log log = LogFactory.getLog(TestOss.class);

    //阿里云OSS地址,这里看根据你的oss选择
    private static String endpoint = "oss-cn-shanghai.aliyuncs.com";
    //阿里云OSS账号
    private static String accessKeyId = "这里是你的oss key";
    //阿里云OSS密钥
    private static String accessKeySecret = "这里是你的 oss secret";
    //阿里云OSS上的存储块bucket名字
    private static String bucketName = "这是你的 oss bucket。可以理解这就是一个数据库";

    /**
     * 销毁
     */
    public void destory() {
        ossClient.shutdown();
    }

    private OSSClient ossClient;

    public TestOss() {
        ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }

    /**
     * 根据文件流和文件名和oss路径前缀上传文件到OSS
     *
     * @param instream 文件流
     * @param ossPrefix oss路径前缀
     * @param fileName 文件名包括后缀名
     * @return 出错返回"" ,唯一MD5数字签名
     */
    public String uploadByPrefixAndName(InputStream instream, String ossPrefix,String fileName) {
        String ret = "";
        try {
            //创建上传Object的Metadata
            ObjectMetadata objectMetadata = new ObjectMetadata();
            objectMetadata.setContentLength(instream.available());
            objectMetadata.setCacheControl("no-cache");
            objectMetadata.setHeader("Pragma", "no-cache");
            objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."))));
            objectMetadata.setContentDisposition("inline;filename=" + fileName);
            //上传文件
            PutObjectResult putResult = ossClient.putObject(bucketName, ossPrefix + fileName, instream, objectMetadata);
            ret = putResult.getETag();
        } catch (IOException e) {
            log.error(e.getMessage(), e);
        } finally {
            try {
                if (instream != null) {
                    instream.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return ret;
    }

    /**
     * 判断OSS服务文件上传时文件的类型contentType
     *
     * @param filenameExtension 文件后缀
     * @return String
     */
    public static String getcontentType(String filenameExtension) {
        if (".bmp".equalsIgnoreCase(filenameExtension)) {
            return "image/bmp";
        }
        if (".gif".equalsIgnoreCase(filenameExtension)) {
            return "image/gif";
        }
        if (".jpeg".equalsIgnoreCase(filenameExtension) ||
                ".jpg".equalsIgnoreCase(filenameExtension) ||
                ".png".equalsIgnoreCase(filenameExtension)) {
            return "image/jpeg";
        }
        if (".html".equalsIgnoreCase(filenameExtension)) {
            return "text/html";
        }
        if (".txt".equalsIgnoreCase(filenameExtension)) {
            return "text/plain";
        }
        if (".vsd".equalsIgnoreCase(filenameExtension)) {
            return "application/vnd.visio";
        }
        if (".pptx".equalsIgnoreCase(filenameExtension) ||
                ".ppt".equalsIgnoreCase(filenameExtension)) {
            return "application/vnd.ms-powerpoint";
        }
        if (".docx".equalsIgnoreCase(filenameExtension) ||
                ".doc".equalsIgnoreCase(filenameExtension)) {
            return "application/msword";
        }
        if (".xml".equalsIgnoreCase(filenameExtension)) {
            return "text/xml";
        }
        return "image/jpg";
    }

}

2. 代码二、main方法测试


    public static void main(String[] args) throws FileNotFoundException {
        TestOss oss = new TestOss();
        oss.uploadByPrefixAndName(new FileInputStream("E:/tmp/11.jpg") , "model/data/" ,"11.jpg");

// 三个参数 1. 本地文件的路径  2. 文件上传到阿里云哪个目录下面   3. 文件存储在阿里云上的文件名称,可以和原文件名保持一致,也可以是起个新的名字

    }


    

本地文件上传到 阿里云oss上面 ,可以上传任意的文件,包括二进制文件。

3. 那如果我要上传一个目录呢?如何实现

把本地的一个目录下的文件都上传 到阿里云上面,如何实现。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐