AI智能
改变未来

Java使用OSS实现上传文件


阿里云OSS使用

1.准备OSS

  1. 访问阿里云官网,注册并登录账户(支付宝方便一些,顺便冲点钱)
  2. 在产品分类中,找到阿里云oss
  3. 然后创建一个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、prodspring.profiles.active=dev#阿里云 OSS#不同的服务器,地址不同aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.comaliyun.oss.file.keyid=自己的keyidaliyun.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")@Datapublic 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*/@Servicepublic class OssServiceImpl implements OssService {@AutowiredAliyunOSSProUtil aliyunOSSProUtil;@Overridepublic 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*/@Configurationpublic 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*1024resolver.setMaxUploadSize(5 * 1024 * 1024);return resolver;}}

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

下载Nginx

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

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

3.2配置转发列表

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

4.结果

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

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

赞(0) 打赏
未经允许不得转载:爱站程序员基地 » Java使用OSS实现上传文件