Java使用OSS实现上传文件功能

 更新时间:2024年01月11日 08:43:26   作者:橡皮筋儿  
这篇文章主要为大家详细介绍了Java如何使用OSS实现上传文件功能,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解一下

1.准备OSS

  • 访问阿里云官网,注册并登录账户(支付宝方便一些,顺便冲点钱)
  • 在产品分类中,找到阿里云oss
  • 然后创建一个bucket

2.使用OSS(上传文件)

2.1在阿里云网站导出阿里云颁发的 id 和 秘钥

2.2导入maven坐标

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.1.0</version>
</dependency>

2.3进入阿里云oss的学习路径,找到对应java操作的代码

2.3.1首先创建配置文件,将秘钥等信息进行配置

#服务端口
server.port=8002
#服务名
spring.application.name=service-oss

#环境设置:dev、test、prod
spring.profiles.active=dev

#阿里云 OSS
#不同的服务器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=自己的keyid
aliyun.oss.file.keysecret=自己的keysecret
#bucket可以在控制台创建,也可以使用java代码创建
aliyun.oss.file.bucketname=自己创建的bucket名字

2.3.2创建一个工具类,将配置的属性注入到容器中

package com.gyb.eduoss.utils;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Author: 郜宇博
 * @Date: 2021/9/30 14:54
 */
@Component
@ConfigurationProperties(prefix = "aliyun.oss.file")
@Data
public class AliyunOSSProUtil {
    private String endpoint;
    private String keyid;
    private String keysecret;
    private String bucketname;


}

2.3.3编写java实现类代码(文件上传)

package com.gyb.eduoss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.gyb.eduoss.service.OssService;
import com.gyb.eduoss.utils.AliyunOSSProUtil;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

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

/**
 * @Author: 郜宇博
 * @Date: 2021/9/30 15:53
 */
@Service
public class OssServiceImpl implements OssService {
    @Autowired
    AliyunOSSProUtil aliyunOSSProUtil;

    @Override
    public String uploadFileAvatar(MultipartFile multipartFile) {
        //从工具类获取配置文件中的oss值
        String endpoint = aliyunOSSProUtil.getEndpoint();
        String accessKeyId = aliyunOSSProUtil.getKeyid();
        String accessKeySecret = aliyunOSSProUtil.getKeysecret();
        String bucketName = aliyunOSSProUtil.getBucketname();
        System.out.println("endponit:"+endpoint);
        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 填写本地文件的完整路径。
        // 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。
        InputStream inputStream;
        try {
            inputStream = multipartFile.getInputStream();

            //参数一:依次填写Bucket名称
            // 参数二:文件名称,或Object完整路径(例如exampledir/exampleobject.txt)。Object完整路径中不能包含Bucket名称。
            // 参数三:输入流
            String currentTime = String.valueOf(System.currentTimeMillis());
            String currentDate = new DateTime().toString("yyyy/MM/dd");
            String  originalFileName = multipartFile.getOriginalFilename();
            String fileName = currentDate+"/"+currentTime+originalFileName;
            ossClient.putObject(bucketName,fileName, inputStream);
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            // 关闭OSSClient。
            ossClient.shutdown();
        }
        return null;
    }
}

2.3.4创建config类,防止传入文件为null

package com.gyb.eduoss.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

/**
 * @Author: 郜宇博
 * @Date: 2021/10/2 00:21
 */
@Configuration
public class UploadConfig {
    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        //resolveLazily属性启用是为了推迟文件解析,以在在UploadAction中捕获文件大小异常
        resolver.setResolveLazily(true);
        resolver.setMaxInMemorySize(40960);
        //上传文件大小 5M 5*1024*1024
        resolver.setMaxUploadSize(5 * 1024 * 1024);
        return resolver;
    }
}

3.配置Nginx反向代理(可以不配)

下载Nginx

实现将对应访问地址进行正则匹配转发

3.1将监听端口改为81(防止冲突)

3.2配置转发列表

server {
        listen       9001;
		server_name  localhost;
#代表带有eduservice路径的请求都走http://localhost:8001
        location ~ /eduservice/ {
            proxy_pass http://localhost:8001;
        }
#代表带有eduoss的请求都走http://localhost:8002		
		location ~ /eduoss/ {
            proxy_pass http://localhost:8002;
        }
    }

4.结果

此时将前端的访问接口改为9001,即可实现下图功能

从而实现功能不同的请求访问不同的服务器

以上就是Java使用OSS实现上传文件功能的详细内容,更多关于Java OSS上传文件的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot项目启动打包报错类文件具有错误的版本 61.0, 应为 52.0的解决方法

    SpringBoot项目启动打包报错类文件具有错误的版本 61.0, 应为 52.0的解决

    这篇文章主要给大家介绍了关于SpringBoot项目启动打包报错类文件具有错误的版本 61.0, 应为 52.0的解决方法,文中有详细的排查过程和解决方法,通过代码介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 解决在Gradle/IDEA中无法正常使用readLine的问题原因

    解决在Gradle/IDEA中无法正常使用readLine的问题原因

    这篇文章主要介绍了在Gradle/IDEA中无法正常使用readLine的解决方法,原因是由于Gradle的标准输入默认并不与系统标准输入绑定,需手动设置,需要的朋友可以参考下
    2021-12-12
  • java实现word文件转html文件

    java实现word文件转html文件

    这篇文章主要为大家详细介绍了java实现word文件转html文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Java并发编程之阻塞队列详解

    Java并发编程之阻塞队列详解

    这篇文章主要为大家详细介绍了Java并发编程之阻塞队列,什么是阻塞队列?主要的阻塞队列及其方法介绍,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • Mybatis入门教程(四)之mybatis动态sql

    Mybatis入门教程(四)之mybatis动态sql

    这篇文章主要介绍了Mybatis入门教程(四)之mybatis动态sql的相关资料,涉及到动态sql及动态sql的作用知识,本文介绍的非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-09-09
  • 如何使用Spring工具类动态匹配url

    如何使用Spring工具类动态匹配url

    这篇文章主要介绍了如何使用Spring工具类动态匹配url,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 详解Spring @Profile注解的使用和源码解析

    详解Spring @Profile注解的使用和源码解析

    这篇文章主要将通过源码带大家深入了解一下Spring中@Profile注解的原理与使用,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-04-04
  • MyBatis-Plus实现公共字段自动填充功能详解

    MyBatis-Plus实现公共字段自动填充功能详解

    在开发中经常遇到多个实体类有共同的属性字段,这些字段属于公共字段,也就是很多表中都有这些字段,能不能对于这些公共字段在某个地方统一处理,来简化开发呢?MyBatis-Plus就提供了这一功能,本文就来为大家详细讲讲
    2022-08-08
  • 深入理解Spring MVC概要与环境配置

    深入理解Spring MVC概要与环境配置

    本篇文章主要介绍了深入理解Spring MVC概要与环境配置 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-03-03
  • java web图片上传和文件上传实例

    java web图片上传和文件上传实例

    本篇文章主要介绍了java web图片上传和文件上传实例,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11

最新评论