Java使用OSS实现上传文件
Posted 橡皮筋儿
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java使用OSS实现上传文件相关的知识,希望对你有一定的参考价值。
阿里云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实现上传文件的主要内容,如果未能解决你的问题,请参考以下文章
用Aspose-Java免费实现 PDFWordExcelWord互相转换并将转换过得文件上传OSS,返回转换后的文件路径