阿里-oss

文档使用手册

如何使用OSS控制台、ossutil、ossbrowser、OSSSDK_对象存储-阿里云帮助中心

1开通oss

2 创建Bucket

 3 细分还可以创建文件夹

 4 浏览器直接浏览

oss好像升级了,默认直接就下载文件。需要改变为 Content-Type: image/jpg ,但是也不是所有浏览器都好使。 使用https方式访问即可。

 

 5想要word也能在线浏览(开通智能媒体即可)

代码(jdk9或以上版本需要添加jar)

OSS Java SDK的多种安装方式介绍_对象存储 OSS-阿里云帮助中心

        <dependency>
            <groupId>com.aliyun.oss</groupId>
            <artifactId>aliyun-sdk-oss</artifactId>
            <version>3.15.1</version>
        </dependency>
       <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.9</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.58</version>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>4.6.3</version>
        </dependency>
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class AliyunOssConfig {

    @Value("${oss.accesskey:}")
    private String accesskey;
    @Value("${oss.accessSecret:}")
    private String accessSecret;
    /**
     * 域名。
     */
    @Value("${oss.endpoint:}")
    private String endpoint;

    @Bean
    public OSS ossClient() {
        return  new OSSClientBuilder().build(endpoint, accesskey, accessSecret);
    }
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@Data
@AllArgsConstructor
@NoArgsConstructor
public class OssResponse {
    /**
     * 访问地址 例如: http://xx.oss-cn-beijing.aliyuncs.com/uat/aa.txt
     */
   private String url;
    /**
     * 文件完整路径(带文件名)  例如:uat/aa.txt
     * 文件下载有用这个参数
     */
    private String filePath;
    /**
     * 文件名 例如:aa.txt
     */
    private String fileName;
}
import com.aliyun.oss.OSS;
import com.aliyun.oss.model.OSSObject;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;


@Component
public class OssUtil {
    @Value("${oss.bucketName:}")
    private String bucketName;
    /**
     * 域名。
     */
    @Value("${oss.endpoint:}")
    private String endpoint;
    /**
     * bucket下文件夹名称
     */
    @Value("${oss.fileFolder:}")
    private String fileFolder;

    private String http="https";
    @Autowired
    private OSS ossClient;
    /**
     * 上传文件到阿里云oss
     * @param file
     * @return   文件的访问路径 // http://yoing.oss-cn-beijing.aliyuncs.com/pro/exampleobjec.txt
     */
    public OssResponse upload(File file) {
        //文件后缀  .pdf
        String suffix = file.getName().substring(file.getName().lastIndexOf("."));
        String filename = UUID.randomUUID().toString();
        StringBuilder key = new StringBuilder();
        if(StringUtils.isNotBlank(fileFolder)){
            key.append(fileFolder+"/");
        }
        key.append(filename+suffix);
      /*  ObjectMetadata meta = new ObjectMetadata();
        // 指定上传的内容类型。
        meta.setContentType("text/plain;charset=utf-8");
         ossClient.putObject(bucketName,key.toString(),file,meta);*/
        ossClient.putObject(bucketName,key.toString(),file);
        StringBuilder url = new StringBuilder();
        url.append(http+"://");
        url.append(bucketName).append(".");
        url.append(endpoint).append("/");
        if(StringUtils.isNotBlank(fileFolder)){
            url.append(fileFolder).append("/");
        }
        url.append(filename+suffix);
        return new OssResponse(url.toString(),fileFolder.concat("/").concat(filename+suffix),filename+suffix);
    }

    /**
     * 上传
     * @param file
     * @return
     */
    public OssResponse upload(MultipartFile file) throws IOException {
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String filename = UUID.randomUUID().toString();
        StringBuilder key = new StringBuilder();
        if(StringUtils.isNotBlank(fileFolder)){
            key.append(fileFolder+"/");
        }
        key.append(filename+suffix);
     /*   ObjectMetadata meta = new ObjectMetadata();
        // 指定上传的内容类型。
        meta.setContentType("image/png;charset=utf-8");*/
        ossClient.putObject(bucketName,key.toString(),new ByteArrayInputStream(file.getBytes()));
        StringBuilder url = new StringBuilder();
        url.append(http+"://");
        url.append(bucketName).append(".");
        url.append(endpoint).append("/");
        if(StringUtils.isNotBlank(fileFolder)){
            url.append(fileFolder).append("/");
        }
        url.append(filename+suffix);
        return new OssResponse(url.toString(),fileFolder.concat("/").concat(filename+suffix),filename+suffix);
    }

    /**
     * 下载
     * @param response
     * @param url  例如: https://yoing.oss-cn-beijing.aliyuncs.com/pro/03e7ef10-9401-4242-96fa-27a8fba4049e.docx
     * @throws IOException
     */
    public void download(HttpServletResponse response,String url) throws Exception {
        // 判断 bucket 是否存在
        Boolean flag_bucket = ossClient.doesBucketExist(bucketName);
        if(!flag_bucket){
            throw new Exception("bucket不存在");
        }
        String[] split = url.split("\\/");
        String fileName =split[split.length-1];
        String filePath=fileFolder +"/"+fileName;
        String[] split1 = fileName.split("\\.");
        String mimeType =split1[split1.length-1];
        // 判断 要下载的文件 是否存在
        Boolean flag_file = ossClient.doesObjectExist(bucketName, filePath);
        if(!flag_file){
           throw new Exception("文件不存在,或问价路径不对");
        }
        OSSObject ossObject = ossClient.getObject(bucketName, filePath);
        InputStream objectContent = ossObject.getObjectContent();
        //  response.setContentType(getContentType(mimeType));
        //设置响应头类型:content-type
        response.setHeader("Content-Type", getContentType(mimeType));
        response.setCharacterEncoding("UTF-8");
        //  response.setCharacterEncoding(null); // 设置为null,否则Content-Type会带上charset=UTF-8
        // 解决中文文件名乱码
        response.setHeader("Content-disposition","attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
        response.setHeader("filename",URLEncoder.encode(fileName, "UTF-8"));
        byte[] buffer = new byte[1024];
        OutputStream os = response.getOutputStream();
        int len = 0;
        while ((len = objectContent.read(buffer)) > 0) {
            os.write(buffer, 0, len);
        }
        objectContent.close();
        os.flush();
        os.close();
    }

    /**
     * 下载
     * @param response
     * @return
     */
    public void download123(HttpServletResponse response,String url) throws IOException {
        // 判断 bucket 是否存在
        Boolean flag_bucket = ossClient.doesBucketExist(bucketName);
        String filePath="pro/03e7ef10-9401-4242-96fa-27a8fba4049e.docx";
        String fileName="03e7ef10-9401-4242-96fa-27a8fba4049e.docx";
        String[] split = fileName.split("\\.");
        String mimeType =split[split.length-1];
        // 判断 要下载的文件 是否存在
        Boolean flag_file = ossClient.doesObjectExist(bucketName, filePath);

        OSSObject ossObject = ossClient.getObject(bucketName, filePath);
        InputStream objectContent = ossObject.getObjectContent();
        byte[] buffer = new byte[objectContent.available()];
        objectContent.read(buffer);
        objectContent.close();

        response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document;charset=utf-8");
        //设置响应头类型:content-type
     //   response.setHeader("Content-Type", getContentType(mimeType));
       // response.setCharacterEncoding("UTF-8");
      //  response.setCharacterEncoding(null); // 设置为null,否则Content-Type会带上charset=UTF-8
        // 解决中文文件名乱码
        response.setHeader("Content-disposition","attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
        response.setHeader("filename",URLEncoder.encode(fileName, "UTF-8"));
        OutputStream ou = response.getOutputStream();
        ou.write(buffer);
        ou.flush();
        ou.close();

    }

   /**
     *   给访问url加过期时间
     * @param url
     * @return
     */
    public String lookFileExpiration(String url) throws IOException, URISyntaxException {
        //到期时间
        Date expiration = new Date((new Date()).getTime() + 600000L);
        // http://yoing.oss-cn-beijing.aliyuncs.com/pro/exampleobjec.txt
        //文件夹+问价名
        // String key="pro/exampleobjec.txt";
        String[] endpoints = url.split(endpoint);
        String key = endpoints[1].substring(1);
        URL url1 = ossClient.generatePresignedUrl(bucketName, key, expiration);
        String urlStringInternal = url1.toURI().toString();
        String urlString = urlStringInternal.replace("-internal.", ".");
        return urlString;
    }

    public static void main(String[] args) {
        String url="https://mybucket.oss-cn-beijing.aliyuncs.com/uat/aaa.png";
       //bucket
        String bucketName="mybucket";
        //域名
        String endpoint="oss-cn-beijing.aliyuncs.com";
        //文件夹
        String fileFolder="uat";
    }


    private String getContentType(String fileName) {
        Map<String, String> map = new HashMap<>();
        map.put("bmp", "image/bmp");
        map.put("git", "image/gif");
        map.put("png", "image/png");
        map.put("jpg", "image/jpeg");
        map.put("jpeg", "image/jpeg");
        map.put("wbmp", "image/vnd.wap.wbmp");
        map.put("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document");
        map.put("doc", "application/msword");
        map.put("xla", "application/vnd.ms-excel");
        map.put("xlam", "application/vnd.ms-excel");
        map.put("xlsx", "application/vnd.ms-excel");
        return map.get(fileName);
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值