当前位置: 首页 > news >正文

做棋牌网站团队h5怎么生成二维码

做棋牌网站团队,h5怎么生成二维码,跨境电商一件代发货源平台,建筑公司网站能显示二级建造师报名吗目录 开始 服务端签名直传概述 代码实现 后端实现 前端实现 效果演示 开始 服务端签名直传概述 传统的,我们有两种方式将图片上传到 OSS: a)前端请求 -> 后端服务器 -> OSS 好处:在服务端上传,更加安全…

目录

开始

服务端签名直传概述

代码实现

后端实现

前端实现

效果演示


开始


服务端签名直传概述

传统的,我们有两种方式将图片上传到 OSS:

a)前端请求 -> 后端服务器 -> OSS 

好处:在服务端上传,更加安全.

坏处:给服务器带来压力.

b)直接写在前端 js 代码中

好处:效率高,不用给服务器带来额外压力.

坏处:危险,用户直接可以看得到 OSS账号密码 信息.

因此最好的方式就是 服务端签名直传:用户直接去服务器请求获取上传签名(账号密码加密生成的防伪签名,一般有过期时间),服务器就返回防伪签名,然后用户就可以拿着签名和要上传的文件,通过表单直接上传到 OSS 中.

此时既不需要服务端承担上传文件到 OSS 中的压力,也保证了 OSS账号密码 信息的安全性.

代码实现

后端实现

a)配置文件

minio:access-key: rootsecret-key: rootrootendpoint: http://100.105.180.32:9001bucket: dir1

b)Bean 配置 

import org.springframework.context.annotation.Configuration
import io.minio.MinioClient
import org.springframework.beans.factory.annotation.Value
import org.springframework.context.annotation.Bean@Configuration
class MinioConfig {@Value("\${minio.access-key}")private lateinit var accessKey: String@Value("\${minio.secret-key}")private lateinit var secretKey: String@Value("\${minio.endpoint}")private lateinit var endpoint: String@Beanfun minioClient(): MinioClient = MinioClient.builder().endpoint(endpoint) //格式必须是 http://ip:port  注意: 这里使用的 9001 端口,而不是 9000.credentials(accessKey, secretKey) //用户名 和 密码.build()}

c)核心代码

@RestController
@RequestMapping("/third/minio")
class MinioApi(private val minioClient: MinioClient
) {@Value("\${minio.endpoint}")private lateinit var endpoint: String@Value("\${minio.bucket}")private lateinit var bucket: String@GetMapping("/policy")fun policy(): Map<String, String> {val objectNamePrefix =  "uploads/"// 设置过期时间为当前时间加1小时val expiration = ZonedDateTime.now().plusHours(1)val postPolicy = PostPolicy(bucket, expiration)postPolicy.run {//添加条件,确保字段的值以指定前缀开头,前端指定 key 时,也需要加上该前缀,否则 403addStartsWithCondition("key", objectNamePrefix)//添加条件,将文件大小范围限制在 1 ~ 10485760 (1 到 10 MB)addContentLengthRangeCondition(1, 10485760)}val result = minioClient.getPresignedPostFormData(postPolicy).apply {//这里是给前端构造 Minio 请求的this["url"] = "$endpoint/$bucket"}return result}}

前端实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Minio File Upload</title>
</head>
<body>
<h2>Minio 文件上传</h2>
<input type="file" id="fileInput" />
<button onclick="uploadFile()">上传</button><script>async function uploadFile() {const fileInput = document.getElementById('fileInput');if (!fileInput.files.length) {alert('请选择文件');return;}const file = fileInput.files[0];const response = await fetch('http://localhost:10010/third/minio/policy');const formData = await response.json();const data = new FormData();for (const [key, value] of Object.entries(formData)) {data.append(key, value);}// 构建对象键(这里一定要和 后端 那里的设定的前缀一致,否则 403)const objectName = 'uploads/' + file.name;data.append('key', objectName);data.append('file', file);// 上传 URLconst uploadUrl = formData['url'];const uploadResponse = await fetch(uploadUrl, {method: 'POST',body: data,});if (uploadResponse.ok) {alert('上传成功');} else {alert('上传失败');}}
</script>
</body>
</html>

效果演示

a)点击选择文件,选择 mongo.png

b)点击上传

c)返回 MinIO 控制台,就可以看到文件已经长传成功~

http://www.yayakq.cn/news/909214/

相关文章:

  • 汕头市澄海建设局门户网站视频制作素材
  • 宁德市住房和城乡建设局网站北京战略咨询公司
  • 新公司网站建设费用怎么入账佛山做外贸网站推广
  • 重庆主城推广网站建设广州建设企业网站公司
  • 网站建设评比自评情况电商网站统计怎么做
  • sns社交网站注册做公司网站 烟台
  • 网站备案需要花钱吗晋江网站建设公司
  • 天津北京网站建设团队做网站的收获
  • 富阳网站建设价格南京企业网站排名优化
  • 谁有qq网站开发资源群wordpress新站SEO优化
  • 网站手机源码网站建设如何选择域名
  • 表白墙网站怎么做网站模板论坛
  • dede自动一键更新网站建立网站如何盈利
  • 网站策划方案实例衡水建设网站首页
  • 制作宣传片视频系统优化
  • 网站关键词密度是怎么计算的徐州seo
  • 钦州市建设工程质量监督站网站工业和信息化部工业文化发展中心
  • 网站导航图怎么做的详细步骤wordpress调用logo
  • 7个优秀网站设计赏析太原网站建设随州
  • 地方旅游网站开发外贸自建站 源码
  • 浙江省网站备案时间分站式二手车网站源码
  • 网站开发背景知识论文网站建设和优化的好处
  • 网站 开发 语言西安都蓝网站建设
  • 河南省水利建设厅网站网页翻译怎么弄
  • 网站如何做广告网页制作软件只能使用vscode
  • 天津建站软件东莞seo搜索
  • 昌平电子网站建设WordPress主题INN2015
  • 上海微网站小程序官方文档
  • 怎样做网站结构优化编程学习入门软件
  • 网站建设公司电话开发软件网站多少钱