1. Uniapp上传文件至AWS S3
1.1 创建demo项目
HBuilderX新建uniapp项目,选择默认模板
在mainfest.json中配置上传超时时间
{
"networkTimeout": {
"request": 30000,
"downloadFile": 30000,
"uploadFile": 30000,
"connectSocket": 30000
}
}
在index.html中添加如下代码:
<script>
if (global === undefined) {
// 解决global未定义问题
var global = window;
}
</script>
1.2 实现代码
安装依赖npm install aws-sdk
在index.vue中编写如下代码:
<template>
<view>
<button size="mini" @click="chooseFile">选择文件</button>
<button size="mini" @click="uploadFile">上传文件</button>
<text v-if="selectedFile">{{ selectedFile.name }}</text>
<text v-if="uploadProgress">进度:{{ uploadProgress }}</text>
</view>
</template>
<script>
import AWS from 'aws-sdk'
export default {
data() {
return {
uploadProgress: 0,
selectedFile: null
}
},
onLoad() {
},
methods: {
chooseFile() {
const self = this
uni.chooseFile({
count: 1, //默认100
type: 'all',
success: function (res) {
self.selectedFile = res.tempFiles[0] // 将选择的文件保存到 selectedFile 变量中
self.newFileName = self.selectedFile.name
}
});
},
uploadFile() {
if (!this.selectedFile) {
return;
}
const s3 = new AWS.S3({
accessKeyId: '需要修改',
secretAccessKey: '需要修改',
region: '需要修改'
});
const params = {
Bucket: '需要修改',
Key: this.selectedFile.name,
Body: this.selectedFile
};
const options = {
partSize: 10 * 1024 * 1024,
queueSize: 1
};
const upload = s3.upload(params, options);
upload.on('httpUploadProgress', (e) => {
if (e.total) {
this.uploadProgress = Math.round((e.loaded / e.total) * 100);
}
});
upload.promise();
this.uploadProgress = 100;
}
}
}
</script>
<style>
</style>
1.3 AWS S3相关配置
代码中我们看到有四处需要修改:
我们登录后,点击安全凭据
然后我们创建访问秘钥,下载为csv保存,即可获得accessKeyId与secretAccessKey
我们找到存储桶,进行创建并记下所在区域,如us-east-2,至此4个参数都齐了
最后一步,我们需要在存储桶的权限中进行跨域设置
[
{
"AllowedHeaders": [
"*"
],
"AllowedMethods": [
"GET",
"PUT",
"POST",
"DELETE"
],
"AllowedOrigins": [
"*"
],
"ExposeHeaders": []
}
]
好啦,基于UNI-APP上传文件至AWS S3就完成了
2. jasypt加密数据库用户名密码
生产环境数据库密码上传到github上不安全,故考虑加密方式处理,本文基于最新的3.0.3版本介绍
2.1 引入maven依赖
<dependency>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<plugin>
<groupId>com.github.ulisesbocchio</groupId>
<artifactId>jasypt-maven-plugin</artifactId>
</plugin>
2.2 配置application.yml
jasypt:
encryptor:
password: shenjian #盐值
2.3 采用插件命令获得加密值
mvn jasypt:encrypt-value -Djasypt.encryptor.password="shenjian" -Djasypt.plugin.value="root"
加密后结果,从下图可以看出3.0.3默认使用PBEWITHHMACSHA512ANDAES_256加密算法
对当前结果解密
mvn jasypt:decrypt-value -Djasypt.encryptor.password="shenjian" -Djasypt.plugin.value="CbKzV4JPAIGLmGjNyNRgVJ8t6JN7xRW2lPh24VigJryoli/wAlNwbabHR8gIt0bM"
解密后结果
既然能够解密,呢么盐值的存取是比较重要的,稍后讲解
2.4 配置加密后的数据库
spring:
# Mysql数据源
datasource:
url: jdbc:mysql://127.0.0.1:3306/photo?serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: ENC(CbKzV4JPAIGLmGjNyNRgVJ8t6JN7xRW2lPh24VigJryoli/wAlNwbabHR8gIt0bM)
password: ENC(R5BPqaEh0oa+fgAqthW0eFTMuooFHEjOglQ8o38gvEFTiCtORllppbF+932zh5Zc)
driver-class-name: com.mysql.cj.jdbc.Driver
因为项目基于springboot,只要在启动类有@SpringBootApplication注解就可以了
2.5 启动参数中添加盐值
刚才看到可以解密加密后的值,呢么在配置文件中就不能存在盐值配置,删除application.yml中的盐值配置,可以采用启动参数配置或者从环境变量中获取方式,如下
方式1: 在idea启动时添加参数
--jasypt.encryptor.password=shenjian
方式2: springboot启动时添加参数
java -jar photo-api-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=shenjian
方式3:从linux环境变量中获取盐值
# 进入环境变量设置文件
vim /etc/profile
# 在最后一行添加变量
export JASYPT_PASSWORD=shenjian
# 启动项目
java -jar photo-api-0.0.1-SNAPSHOT.jar --jasypt.encryptor.password=${JASYPT_PASSWORD}
2.6 常见问题
1)Caused by: java.lang.SecurityException: Cannot locate policy or framework files!
分析:由于3.0.3中使用的算法可能在java8的安全策略中没有,需要手动下载jce_policy-8并将里面的jar包放在如${JAVA_HOME}/jre/lib/security中,如下图所示:
欢迎关注公众号算法小生