Springboot+阿里云OSS,不下载文件直接读取流,存到数据库

  • 第一步配置oss yml文件

 

  • 然后写个配置类,读取该文件, 也可以直接使用@value("${oss.xxxx}") 去在任何类里面拿到这个数据
  • 多个yml文件使用@peopertiesSouce(value="classPath:")来指定yml文件
  • 然后使用
    @ConfigurationProperties(prefix = "oss")
    
    
      private String endpointBJ;
    
    
    这里代表在OSS下面的endpointBJ 
    endpointBJ和yml里面的配置名字一样,则可以映射上
@Component
public class AliyunConfig implements InitializingBean {


    //如果我们直接@value("a")是把a赋值给endpoint
    //所以我们需要使用spring提供的一个方法"${a}"来获取a对应的值
    @Value("${aliyun.endpointBJ}")
    private String endpointBJ;

    @Value("${aliyun.endpointSZ}")
    private String endpointSZ;

    @Value("${aliyun.accessKeyId}")
    private String accessKeyId;

    @Value("${aliyun.accessKeySecret}")
    private String accessKeySecret;

    @Value("${aliyun.bucketBJ}")
    private String bucketBJ;

    @Value("${aliyun.bucketSZ}")
    private String bucketSZ;

    //这些值赋值好了但是我们没用办法直接使用的。

    //我们可以设置一些staic静态变量,这样就可以直接用类名.来调用了
    public static String BUCKETBJ;
    public static String BUCKETSZ;
    public static String ENDPOINTBJ;
    public static String ENDPOINTSZ;
    public static String ACCESSKEYID;
    public static String ACCESSKEYSECRET;

    //服务器启动就会初始化ConstantYmlUtils并且调用afterPropertiesSet方法读取配置文件的内容
    @Override
    public void afterPropertiesSet() throws Exception {
        BUCKETBJ = bucketBJ;
        BUCKETSZ = bucketSZ;
        ENDPOINTBJ = endpointBJ;
        ENDPOINTSZ = endpointSZ;
        ACCESSKEYID = accessKeyId;
        ACCESSKEYSECRET = accessKeySecret;
    }


或者我可以直接在这里用
@bean
private oss returnOss(a,b,c){
new一个OSS的实例返回出去,
//这样在service里面直接使用 
@autowrid
private  AliyunConfig  ac  ; 
就直接可以拿到已经连接过的OSS
}

}

 

 

  • 编写service连接OSS
            // ossObject包含文件所在的存储空间名称、文件名称、文件元信息以及一个输入流。
            OSS ossClient = new OSSClientBuilder().build(AliyunConfig.ENDPOINTBJ, AliyunConfig.ACCESSKEYID, AliyunConfig.ACCESSKEYSECRET);


//这里bucketName是yml里面的配置的, strDateList[0] 代表的是你需要下载的文件名
            OSSObject ossObject = ossClient.getObject(bucketName, strDateList[0]);

//获取输入流
            InputStream input = ossObject.getObjectContent();

            //获取ZIP输入流,这里我指定了缓存的空间为10兆,因为我这边数据量很大,然后就是编码格式
GBK 乱码就用UTF-8换着是试一下 ,
            ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(input, 10 * 1024), Charset.forName("GBK"));

            //定义ZipEntry置为null,避免由于重复调用zipInputStream.getNextEntry造成的不必要的问题
            ZipEntry ze = null;

            //循环遍历
            while ((ze = zipInputStream.getNextEntry()) != null) {
                    //读取
BufferedReader br = new BufferedReader(new InputStreamReader(zipInputStream));
String line;

   while ((line = br.readLine()) != null) {

//这里就取到了字符串line,你里面可能存的是别的东西,我这里是json字符串

    }

//每一次循环都关闭,不然会内存溢出,我指特别大的数据量
zipInputStream.closeEntry();
}

//循环结束关闭整个流
 input.close();

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要从阿里云oss下载文件并发送到指定邮箱,可以结合Java SDK提供的OSSClient类和JavaMail API实现。以下是使用Spring Boot实现从阿里云oss下载文件并发送到指定邮箱的步骤: 1. 引入阿里云Java SDK、JavaMail API和Spring Boot依赖 在pom.xml中添加以下依赖: ``` <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> ``` 2. 配置阿里云oss和邮箱参数 在application.properties或application.yml中添加以下阿里云oss和邮箱参数: ``` aliyun.oss.endpoint=<your endpoint> aliyun.oss.accessKeyId=<your accessKeyId> aliyun.oss.accessKeySecret=<your accessKeySecret> aliyun.oss.bucketName=<your bucketName> spring.mail.host=<your mail host> spring.mail.username=<your mail username> spring.mail.password=<your mail password> spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true ``` 3. 实现文件下载和邮件发送接口 在Spring Boot的Controller中添加文件下载和邮件发送接口,使用OSSClient类下载指定文件,并使用JavaMail API发送邮件: ``` @RestController public class FileController { @Autowired private OSSClient ossClient; @Autowired private JavaMailSender mailSender; @GetMapping("/downloadAndSendEmail") public String downloadAndSendEmail(@RequestParam String objectName, @RequestParam String to) throws IOException, MessagingException { // 下载文件 OSSObject ossObject = ossClient.getObject(bucketName, objectName); InputStream inputStream = ossObject.getObjectContent(); byte[] bytes = IOUtils.toByteArray(inputStream); // 发送邮件 MimeMessage message = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(message, true); helper.setTo(to); helper.setSubject("File Downloaded from OSS"); helper.setText("Please find the attached file."); helper.addAttachment(objectName, new ByteArrayResource(bytes)); mailSender.send(message); return "Email sent successfully!"; } } ``` 在上面的例子中,我们使用了@RequestParam注解来获取文件名和收件人邮箱,然后使用OSSClient类下载文件,并使用JavaMail API发送邮件。最后,返回发送邮件成功的消息。 注意:在使用完OSSClient后,需要及时关闭它以释放资源。可以在Spring Boot的配置类中添加@PreDestroy注解来关闭OSSClient: ``` @Configuration public class OSSConfig { @Value("${aliyun.oss.endpoint}") private String endpoint; @Value("${aliyun.oss.accessKeyId}") private String accessKeyId; @Value("${aliyun.oss.accessKeySecret}") private String accessKeySecret; @Value("${aliyun.oss.bucketName}") private String bucketName; @Bean public OSSClient ossClient() { return new OSSClient(endpoint, accessKeyId, accessKeySecret); } @PreDestroy public void destroy() { ossClient().shutdown(); } } ``` 以上就是使用Spring Boot从阿里云oss下载文件并发送到指定邮箱的步骤。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值