不允许你还不会OSS文件操作,看完一篇就够了

这篇具有很好参考价值的文章主要介绍了不允许你还不会OSS文件操作,看完一篇就够了。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景:目前各个公司常用的静态文件服务器是OSS,不管是哪一家云厂商,都会有OSS资源服务提供,在项目中通常会议基础组件的形式存在,很少人会关注,下面就以阿里云为例来介绍一下OSS的使用。

1,引入OSS插件

<dependency>

        <groupId>com.aliyun.oss</groupId>

        <artifactId>aliyun-sdk-oss</artifactId>

        <version>3.8.0</version>

</dependency>

2,使用OSS上传文件

 

package com.aaa.store.utils;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.UUID;

import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.util.UriUtils;

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.ObjectMetadata;

import lombok.extern.slf4j.Slf4j;

/**
 * 阿里云OSS工具类
 */
@Slf4j
public class OSSClientUtils {
  /**
   * bucket中的文件夹,存放销售出库导入文件相关资源
   */
  public static String IMEI_DIR = "imei";

  /**
   * bucket中的文件夹,存放其他中相关资源
   */
  public static String OTHER_DIR = "other/";

  /**
         * 暂存文件的路径
   */
  public static String TEMP_PATH = "tmp/";

  /**
   * 通用文件的路径
  */
  public static String COMMON_PATH = "common/";

  /**
   * bucket中的文件夹,存放人脸相关资源
   */
  public static String FACE_DIR = "face";

  /**
    * bucket中的文件夹,存放店铺相关资源
  */
  public static String SHOP_DIR = "shop";

  /**
   * bucket中的文件夹,存放样机相关资源
  */
  public static String DEMO_MODEL_DIR = "demoModel";
    
  /**
  * bucket中的文件夹,存放资产相关资源
  */
  public static String ASSET_DIR = "asset";

  /**
   * bucket中的文件夹,存放销量上报发票相关资源
  */
  public static String RECEIPT_DIR = "receipt";
  
  /**
   * bucket中的文件夹,存放印度国包发票相关资源
  */
  public static String INVOICE_DIR = "invoice";

    /**
     * 客户管理
     */
    public static String CUSTOMER_DIR = "customer";
  
  /**
  * bucket中的文件夹,存放Banner相关资源
  */
  public static String BANNER_DIR = "banner";
  
  /**
   * bucket中的文件夹,存放FTP相关资源
   */
   public static String FTP_DIR = "ftp";

  private final static String DEFAULT_CHARSET = "utf-8";
  private final static int DEFAULT_TIME_OUT = 60000;

  /**
   * 上传文件到OSS
   * @param file
   * @param ossClient
   * @param bucketName
   * @param bucketDirName
   * @return
   * @throws Exception
   */
  public static String uploadFile2Oss(MultipartFile file,OSSClient ossClient,String bucketName,String bucketDirName) throws Exception {
       String originalFileName = file.getOriginalFilename();
       String fileName = UUID.randomUUID()+originalFileName.substring(originalFileName.lastIndexOf("."),originalFileName.length());
       try {
          InputStream inputStream = file.getInputStream();
          String dirName = getBucketDirName(bucketDirName);
          return uploadStream2OSS(inputStream,ossClient,bucketName,dirName,fileName);
       } catch (Exception e) {
          e.printStackTrace();
       }
       return null;
  }

  /**
          * 上传到OSS服务器  如果同名文件会覆盖服务器上的
   * @param instream  文件流
   * @param ossClient
   * @param bucketName
   * @param dirName
   * @param fileName
   * @return
   */
  public static String uploadStream2OSS(InputStream instream,OSSClient ossClient,String bucketName, String dirName,String fileName) {
      try {
          log.info("===== enter uploadStream2OSS, fileName:" + fileName);
          String file = URLEncoder.encode(fileName, "UTF-8");
          //创建上传Object的Metadata
          ObjectMetadata objectMetadata = new ObjectMetadata();
          objectMetadata.setContentLength(instream.available());
          objectMetadata.setCacheControl("no-cache");
          objectMetadata.setHeader("Pragma", "no-cache");
          objectMetadata.setHeader("Content-Disposition", "filename*=utf-8''" + file);
          objectMetadata.setContentType(getContentType(fileName.substring(fileName.lastIndexOf(".") + 1)));
          objectMetadata.setContentDisposition("attachment;filename*=utf-8''" + file);
          objectMetadata.setContentEncoding(StandardCharsets.UTF_8.name());
          //上传文件
          String key =  dirName + fileName;
          ossClient.putObject(bucketName, key, instream, objectMetadata);
          return getUrl(key, ossClient, bucketName);
      } catch (IOException e) {
          e.printStackTrace();
      } finally {
          try {
             if (instream != null) {
               instream.close();
             }
          } catch (IOException e) {
             e.printStackTrace();
          }
     }
      return null;
  }

  public static String getBucketDirName(String bucketDirName){
     SimpleDateFormat sdf = new SimpleDateFormat("yyMM");
     return bucketDirName+"/"+sdf.format(new Date())+"/";
  }

  /**
   * Description: 判断OSS服务文件上传时文件的contentType
   * @param filenameExtension 文件后缀
   * @return String
   */
  public static String getContentType(String filenameExtension) {
        String contentType = "";
          switch(filenameExtension.toUpperCase()) {
              case "BMP": contentType = "image/bmp";break;
              case "GIF": contentType = "image/gif";break;
              case "JPEG":
              case "JPG": 
                  contentType = "image/jpg";
                  break;
              case "PNG": contentType = "image/png";break;
              case "HTML": contentType = "text/html";break;
              case "TXT": contentType = "text/plain";break;
              case "VSD": contentType = "application/vnd.visio";break;
              case "PPTX":
              case "PPT": contentType = "application/vnd.ms-powerpoint";break;
              case "DOCX": contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";break;
              case "DOC": contentType = "application/msword";break;
            case "XLSX": contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";break;
              case "XLS": contentType = "application/vnd.ms-excel";break;
              case "XML": contentType = "text/xml";break;
              case "PDF": contentType = "application/pdf";break;
              default:contentType="file";
          }
        return contentType;
  }

  /**
   * 获得url链接
   * @param key
   * @return
   */
  public static String getUrl(String key,OSSClient ossClient,String bucketName) {
      // 设置URL过期时间为50年
      Date expiration = DateUtils.add(new Date(), Calendar.YEAR, 50);
      // 生成URL
      URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
      if (url != null) {
          String finalUrl = url.toString();
          finalUrl = finalUrl.replace("http:", "https:");
          return finalUrl;
      }
      return null;
  }

  /**
          * 上传文件到OSS
   * @param file
   * @param ossClient
   * @param bucketName
   * @param bucketDirName
   * @return
   * @throws Exception
   */
  public static String uploadFile2Oss(File file, OSSClient ossClient, String bucketName, String bucketDirName) throws Exception{
        InputStream inputStream = null;
        String fileName = file.getName();
        try {
            inputStream = new FileInputStream(file);
            String dirName = getBucketDirName(bucketDirName);
            return uploadStream2OSS(inputStream,ossClient,bucketName,dirName,fileName);
        } catch (Exception e) {
            e.printStackTrace();
        }finally{
            if(inputStream != null){
                inputStream.close();
            }
        }
        return null;
    }

  /**
       * 读取网络文件并返回字节数组
   * @param urlStr
   * @return
   */
  public static byte[] readFileByUrl(String urlStr) {
      InputStream is = null;
      ByteArrayOutputStream os = null;
      byte[] buff = new byte[1024];
      int len = 0;
      try {
           URL url = new URL(UriUtils.encodePath(urlStr, DEFAULT_CHARSET));
           HttpURLConnection conn = (HttpURLConnection) url.openConnection();
           conn.setRequestProperty("Content-Type", "plain/text;charset=" + DEFAULT_CHARSET);
           conn.setRequestProperty("charset", DEFAULT_CHARSET);
           conn.setDoInput(true);
           conn.setDoOutput(true);
           conn.setRequestMethod("GET");
           conn.setReadTimeout(DEFAULT_TIME_OUT);
           conn.connect();
           is = conn.getInputStream();
           os = new ByteArrayOutputStream();
           while ((len = is.read(buff)) != -1) {
             os.write(buff, 0, len);
           }
           return os.toByteArray();
     } catch (IOException e) {
           log.error("发起请求出现异常:", e);
           return null;
     } finally {
          if (is != null) {
            try {
              is.close();
            } catch (IOException e) {
              log.error("【关闭流异常】");
            }
          }
          if (os != null) {
            try {
              os.close();
            } catch (IOException e) {
              log.error("【关闭流异常】");
            }
          }
        }
    }

    public static byte[] readFileByUrlNo(String urlStr) {
        InputStream is = null;
        ByteArrayOutputStream os = null;
        byte[] buff = new byte[1024];
        int len = 0;
        try {
            URL url = new URL(urlStr);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestProperty("Content-Type", "plain/text;charset=" + DEFAULT_CHARSET);
            conn.setRequestProperty("charset", DEFAULT_CHARSET);
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestMethod("GET");
            conn.setReadTimeout(DEFAULT_TIME_OUT);
            conn.connect();
            is = conn.getInputStream();
            os = new ByteArrayOutputStream();
            while ((len = is.read(buff)) != -1) {
                os.write(buff, 0, len);
            }
            return os.toByteArray();
        } catch (IOException e) {
            log.error("发起请求出现异常:", e);
            return null;
        } finally {
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    log.error("【关闭流异常】");
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    log.error("【关闭流异常】");
                }
            }
        }
    }

    /**
     * 根据不同的路径获取不同的上传文件夹路径
     */
    public static String getDirByType(Integer type) {
        if (type == null)
            return OTHER_DIR;
          switch (type) {
            case 1 :
                return FACE_DIR;
            case 2:
                return SHOP_DIR;
            case 3:
                return RECEIPT_DIR;
            case 4:
                return DEMO_MODEL_DIR;
            case 5:
                return ASSET_DIR;
            case 6:
                return BANNER_DIR;
            case 7:
                return INVOICE_DIR;
            case 8:
                return CUSTOMER_DIR;
            default:
                return OTHER_DIR;
        }
    }

    /**
     * 根据文件url获取输入流
     * @param fileUrl
     * @return
     */
    public static InputStream getInputStream(String fileUrl) {
        byte[] content = OSSClientUtils.readFileByUrlNo(fileUrl);
        return ByteToInputStreamUtil.byte2Input(content);
    }
    
    /**
       *   删除文件
     * @param ossClient
     * @param bucketName
     * @param url 文件路径
     * @return
     */
    public static boolean removeFileFromOss(OSSClient ossClient, String bucketName,String url) {
        try {
            ossClient.deleteObject(bucketName, url);
            ossClient.shutdown();
            return true;
        }catch(Exception e) {
            return false;
        }
    }
}

码字不易,给个点赞关注呗 文章来源地址https://www.toymoban.com/news/detail-783145.html

到了这里,关于不允许你还不会OSS文件操作,看完一篇就够了的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 源码剖析Spring依赖注入:今天你还不会,你就输了

    在之前的讲解中,我乐意将源码拿出来并粘贴在文章中,让大家看一下。然而,我最近意识到这样做不仅会占用很多篇幅,而且实际作用很小,因为大部分人不会花太多时间去阅读源码。 因此,从今天开始,我将采取以下几个步骤:首先,我会提前画出一张图来展示本章节要

    2024年02月19日
    浏览(37)
  • 【C#每日一记】多线程实现的贪吃蛇原理—不允许你还不知道

    👨‍💻个人主页 :@元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏 : unity每日一记 ⭐【Unityc#专题篇】之c#进阶篇】 ⭐【Unityc#专题篇】之c#核心篇】 ⭐【Unityc#专题篇】之c#基础篇】 ⭐【Unity-c#专题篇】之

    2024年02月09日
    浏览(39)
  • Golang操作阿里云OSS上传文件

    为什么要使用OSS?应用场景是什么? 最近在开发考试系统,里面需要上传课件,课件包括pdf,map等等各种类型的文件,这些文件不能像图片一样,直接上传到项目目录下面,需要单独存放,阿里云就提供了存储方式,然后OSS是其中的一种,可以用来存储一些文件。 我们需要

    2024年02月02日
    浏览(48)
  • 【MySQL】不允许你不会使用组合查询

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录一

    2024年02月15日
    浏览(42)
  • 【MySQL】不允许你不会使用子查询

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录

    2024年02月12日
    浏览(39)
  • 【MySQL】不允许你不会全文本搜索

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录一

    2024年02月16日
    浏览(38)
  • 【MySQL】不允许你不会创建高级联结

    🎬 博客主页:博主链接 🎥 本文由 M malloc 原创,首发于 CSDN🙉 🎄 学习专栏推荐:LeetCode刷题集! 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📆 未来很长,值得我们全力奔赴更美好的生活✨ 😁大家好呀,今天是我第N次写MySQL,也是最近才学习MySQL,也想着记录

    2024年02月13日
    浏览(48)
  • 你还不会创建炫酷的3D封装库吗?【开源】Altium Designer 3D封装库

    ☞ PCB设计3D封装的作用         很多工程师在使用EDA软件设计PCB电路板时,总喜欢添加完整的3D封装,PCB板中元件的3D封装有什么作用呢? 1、可视化电子系统集成         有助于工程师更好地理解电路板与其他系统部件之间的相互作用。他们可以查看组件之间的空间关

    2024年01月17日
    浏览(49)
  • 【JavaSE】不允许你不会使用String类

    🎥 个人主页:深鱼~ 🔥收录专栏:JavaSE 🌄欢迎 👍点赞✍评论⭐收藏 目录 前言: 一、常用方法 1.1 字符串构造 1.2 String对象的比较 (1)==比较是否引用同一个对象 注意:对于内置类型,==比较的是变量中的值;对于引用类型==比较的是引用中的地址 (2)boolean equals(Objec

    2024年02月05日
    浏览(33)
  • 【超简单】利用Python去除图片水印,太神奇了叭,你还不会嘛?(附三种方法)

    哈喽!我是栗子,今天忙里偷闲给大家更新一下文啦~ 大家是不是经常遇到一些电子版加了一些水印需要去掉才能用的或是需要加一些水印文字的 呢? 工作的时候,尤其是自媒体工作者,必备水印添加工具以保护知识产权,网上有许多的在线/下 载的水印添加工具,但他们或

    2024年02月06日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包