package com.rlj.util;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.model.MatchMode;
import com.aliyun.oss.model.PolicyConditions;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.io.InputStream;
import java.time.LocalDate;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
@RestController
@RequestMapping("/oss")
@Configuration
public class AliyunOSSUtils {
@Autowired
private AliyunOSSProp aliyunOSSProp;
/**
* 上传文件
*
* @return 文件上传后的路径
*/
public String putObject(File file) {
// 指定文件上传的文件完整路径。路径中不能包含Bucket名称,例如2024/02/06/abc.jpg
LocalDate localDate = LocalDate.now();
String dir = localDate.getYear() + "/" + localDate.getMonthValue() + "/" + localDate.getDayOfMonth();
String objectName = dir + "/" + IdUtil.simpleUUID() + "." + FileUtil.extName(file);
if (ObjectUtil.isNotEmpty(aliyunOSSProp.getFilePath())) {
objectName = aliyunOSSProp.getFilePath() + "/" + objectName;
}
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(aliyunOSSProp.getEndpoint(), aliyunOSSProp.getAccessKey(), aliyunOSSProp.getAccessKeySecret());
// 创建PutObjectRequest对象。 ,
PutObjectRequest putObjectRequest = new PutObjectRequest(aliyunOSSProp.getBucketName(), objectName, file);
// 上传文件。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
// 返回文件上传后的路径
String filePath = "https://" + aliyunOSSProp.getBucketName() + "." + aliyunOSSProp.getEndpoint() + "/" + objectName;
return filePath;
}
public String putObject(InputStream is, String fileName) {
// 指定文件上传的文件完整路径。路径中不能包含Bucket名称,例如image/abc.jpg
LocalDate localDate = LocalDate.now();
String dir = localDate.getYear() + "/" + localDate.getMonthValue() + "/" + localDate.getDayOfMonth();
String objectName = dir + "/" +IdUtil.simpleUUID() + "." + FileUtil.extName(fileName);
if (ObjectUtil.isNotEmpty(aliyunOSSProp.getFilePath())) {
objectName = aliyunOSSProp.getFilePath() + "/" + objectName;
}
// 创建OSSClient实例。
OSS ossClient = new OSSClientBuilder().build(aliyunOSSProp.getEndpoint(), aliyunOSSProp.getAccessKey(), aliyunOSSProp.getAccessKeySecret());
// 创建PutObjectRequest对象。 ,
PutObjectRequest putObjectRequest = new PutObjectRequest(aliyunOSSProp.getBucketName(), objectName, is);
// 上传文件。
PutObjectResult result = ossClient.putObject(putObjectRequest);
// 关闭OSSClient。
ossClient.shutdown();
// 返回文件上传后的路径
String filePath = "https://" + aliyunOSSProp.getBucketName() + "." + aliyunOSSProp.getEndpoint() + "/" + objectName;
return filePath;
}
/**
* 获取oss签名及其他信息
*
* @return
*/
public Map<String, String> getOssSign() {
//1.指定上传的位置。格式为 bucketname.endpoint
String host = "https://" + aliyunOSSProp.getBucketName() + "." + aliyunOSSProp.getEndpoint();
//2.指定文件上传的文件夹。
LocalDate localDate = LocalDate.now();
String dir = localDate.getYear() + "/" + localDate.getMonth() + "/" + localDate.getDayOfMonth();
//3.创建OSSClient实例。
OSS ossClient = null;
try {
//4.策略过期时间
long expireTime = 100;
long expireEndTime = System.currentTimeMillis() + expireTime * 1000;
Date expiration = new Date(expireEndTime);
//5.PostObject请求最大可支持的文件大小为5 GB,即CONTENT_LENGTH_RANGE为5*1024*1024*1024。
PolicyConditions policyConds = new PolicyConditions();
policyConds.addConditionItem(PolicyConditions.COND_CONTENT_LENGTH_RANGE, 0, 1048576000);
policyConds.addConditionItem(MatchMode.StartWith, PolicyConditions.COND_KEY, dir);
//6.创建OSSClient实例。
ossClient = new OSSClientBuilder()
.build(aliyunOSSProp.getEndpoint(), aliyunOSSProp.getAccessKey(), aliyunOSSProp.getAccessKeySecret());
String postPolicy = ossClient.generatePostPolicy(expiration, policyConds);
byte[] binaryData = postPolicy.getBytes("utf-8");
String encodedPolicy = BinaryUtil.toBase64String(binaryData);
//7.签名
String postSignature = ossClient.calculatePostSignature(postPolicy);
//8.返回签名及OSS相关参数
Map<String, String> respMap = new LinkedHashMap<String, String>();
respMap.put("accessid", aliyunOSSProp.getAccessKey());
respMap.put("policy", encodedPolicy);
respMap.put("signature", postSignature);
respMap.put("dir", dir);
respMap.put("host", host);
respMap.put("expire", String.valueOf(expireEndTime / 1000));
return respMap;
} catch (Exception e) {
e.printStackTrace();
System.out.println(e.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
return null;
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
该系统为基于Java开发的物资验收管理系统后端设计源码,包含186个文件,涵盖137个Java源文件、35个XML配置文件、6个YAML/YML文件、1个Git忽略文件和1个属性文件,旨在实现高效物资验收管理。
资源推荐
资源详情
资源评论
收起资源包目录
基于Java开发的物资验收管理系统后端设计源码 (219个子文件)
.gitignore 490B
AliyunOSSUtils.java 6KB
Suppliers.java 4KB
AppJwtUtil.java 4KB
SuppliersController.java 3KB
GoodsServiceImpl.java 3KB
Contracts.java 3KB
ContractsController.java 3KB
MaterialsController.java 3KB
TypeController.java 2KB
UserServiceImpl.java 2KB
Goods.java 2KB
Knif4jConfiguration.java 2KB
AccountController.java 2KB
GoodsController.java 2KB
SuppliersServiceImpl.java 2KB
DetailedMaterials.java 2KB
UserController.java 1KB
Result.java 1KB
MaterialEmpController.java 1KB
ResultCodeEnum.java 1KB
ContractsServiceImpl.java 1KB
MaterialOrganizerController.java 1KB
MaterialDeptController.java 1KB
MaterialStructureController.java 1KB
ProjectSettlements.java 1KB
MaterialOrganizer.java 1KB
MaterialEmp.java 1KB
Tbvo.java 1KB
MaterialsServiceImpl.java 1KB
MaterialEmpVo.java 1KB
MaterialDeptServiceImpl.java 1KB
TbUser.java 1KB
Unlockrecord.java 1KB
TypeServiceImpl.java 1KB
MaterialOrganizerServiceImpl.java 1KB
Activity.java 1KB
Permission.java 1KB
MaterialEmpServiceImpl.java 1KB
Account.java 1KB
MD5.java 1018B
MaterialStructure.java 1016B
TbEnterprise.java 1007B
MaterialStructureServiceImpl.java 990B
ActivityController.java 985B
MybatisPlusConfig.java 928B
RolePermission.java 925B
Roles.java 920B
MaterialApplication.java 914B
PriceGoods.java 911B
SendGoodsApplication.java 910B
UserRole.java 901B
ReceivingMaterialsController.java 873B
MaterialDept.java 862B
TbIndustry.java 858B
MaterialPost.java 849B
ContractsProject.java 849B
Materials.java 847B
Exception.java 836B
ReceivingMaterials.java 834B
Users.java 832B
ContractApplication.java 831B
PriceGoodsController.java 806B
ActivityServiceImpl.java 805B
CompanyB.java 800B
CompanyA.java 800B
Main.java 797B
Users.java 793B
TbEnterpriseController.java 781B
ProjectSettlementsServiceImpl.java 769B
AccountServiceImpl.java 757B
DetailedMaterialsController.java 756B
ISuppliersService.java 752B
TbEnterpriseServiceImpl.java 741B
MaterialOrganizerMapper.java 715B
MaterialDeptVo.java 707B
ContractsMapper.java 672B
MaterialDeptMapper.java 666B
AliyunOSSProp.java 653B
GlobalExceptionHandler.java 597B
MaterialEmpMapper.java 587B
IMaterialsService.java 571B
SuppliersQuery.java 569B
MaterialsQuery.java 563B
IContractsService.java 539B
AccountApplication.java 532B
materialApplication.java 531B
ReceivingMaterialsServiceImpl.java 528B
TypeQuery.java 523B
MaterialStructureMapper.java 523B
DetailedMaterialsServiceImpl.java 521B
ITypeService.java 521B
PermissionMapper.java 513B
RolePermissionServiceImpl.java 512B
SuppliersClients.java 507B
IGoodsService.java 495B
UserApplication.java 492B
MaterialPostServiceImpl.java 486B
Type.java 484B
PermissionServiceImpl.java 484B
共 219 条
- 1
- 2
- 3
资源评论
csbysj2020
- 粉丝: 2804
- 资源: 5574
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 足球比赛统计数据集(95K+ 记录,91特征)CSV
- (2010 -2024)Google 股票数据集(3K+记录,7特征)CSV
- Twitter 谣言检测数据集 TXT
- TESLA (1995-2024)股票数据集(3K+记录,8特征)CSV
- 大型客户流失分析数据集(1K+ 记录,11特征)CSV
- 地震检波器传感器数据集(1.8K+记录,14特征)CSV
- (1990-2024)每日股票数据集(8.5K+记录,13特征)CSV
- (1980-2024)英特尔股票数据集(11k+ 记录,8特征)CSV
- NVIDIA 股票数据集(1.7K+ 记录,7特征)CSV
- 成人收入预测分类数据集(32K+记录,15特征)CSV
- 国家地区的实际面积数据集(200+记录,7特征)CSV
- 航空航天结构设计数据集(300 记录,23特征)CSV
- 发动机故障检测数据集(1K+记录,11特征)CSV
- 发动机故障检测数据数据集(10K 记录,12特征)CSV
- 井字棋游戏数据集(25K+ 记录)CSV
- 建筑性能数据集(50K+记录,19特征)CSV
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功