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

广州专业的做网站石家庄谷歌seo公司

广州专业的做网站,石家庄谷歌seo公司,企业开发网站建设,免费微网站建设目录 开始 服务端签名直传概述 代码实现 后端实现 前端实现 效果演示 开始 服务端签名直传概述 传统的,我们有两种方式将图片上传到 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://dinncochuppah.stkw.cn
http://dinncoilluvial.stkw.cn
http://dinncozussmanite.stkw.cn
http://dinncooperette.stkw.cn
http://dinncotriple.stkw.cn
http://dinncooverlie.stkw.cn
http://dinncocuratorship.stkw.cn
http://dinncolobulate.stkw.cn
http://dinncostrobic.stkw.cn
http://dinncospaceship.stkw.cn
http://dinncomossiness.stkw.cn
http://dinncomooneyed.stkw.cn
http://dinncocelt.stkw.cn
http://dinncoattestation.stkw.cn
http://dinncochromic.stkw.cn
http://dinncodiscontentedness.stkw.cn
http://dinncoplurally.stkw.cn
http://dinncomesochroic.stkw.cn
http://dinncojael.stkw.cn
http://dinncoaphis.stkw.cn
http://dinncobimetallic.stkw.cn
http://dinncobefrogged.stkw.cn
http://dinncopionization.stkw.cn
http://dinncoscrotitis.stkw.cn
http://dinncogoldbug.stkw.cn
http://dinnconightmare.stkw.cn
http://dinncosnaffle.stkw.cn
http://dinncoregal.stkw.cn
http://dinncosubterfuge.stkw.cn
http://dinnconickpoint.stkw.cn
http://dinncolizardite.stkw.cn
http://dinncoataghan.stkw.cn
http://dinncoascendance.stkw.cn
http://dinncoinkwriter.stkw.cn
http://dinncovisional.stkw.cn
http://dinncoromola.stkw.cn
http://dinncopolt.stkw.cn
http://dinncopolybasite.stkw.cn
http://dinncokiel.stkw.cn
http://dinncopomander.stkw.cn
http://dinncoreliction.stkw.cn
http://dinncoproximal.stkw.cn
http://dinncovenene.stkw.cn
http://dinncotemple.stkw.cn
http://dinncojeez.stkw.cn
http://dinncosigil.stkw.cn
http://dinncoponograph.stkw.cn
http://dinncowindsail.stkw.cn
http://dinncocomitragedy.stkw.cn
http://dinncognarly.stkw.cn
http://dinncoparador.stkw.cn
http://dinncouncle.stkw.cn
http://dinncosuccinctly.stkw.cn
http://dinncovenus.stkw.cn
http://dinncointerlanguage.stkw.cn
http://dinncoblueish.stkw.cn
http://dinncoheadful.stkw.cn
http://dinncoreemphasis.stkw.cn
http://dinncospondaic.stkw.cn
http://dinncohepatopathy.stkw.cn
http://dinncoapolitically.stkw.cn
http://dinncomaduro.stkw.cn
http://dinncoapprobatory.stkw.cn
http://dinncoterminative.stkw.cn
http://dinncofreeload.stkw.cn
http://dinncochurchward.stkw.cn
http://dinncosaltchucker.stkw.cn
http://dinncohog.stkw.cn
http://dinncodieffenbachia.stkw.cn
http://dinncopostoperative.stkw.cn
http://dinncopennisetum.stkw.cn
http://dinncobatata.stkw.cn
http://dinncosupersensible.stkw.cn
http://dinncozamboanga.stkw.cn
http://dinncosprint.stkw.cn
http://dinncoquezon.stkw.cn
http://dinncofhwa.stkw.cn
http://dinncopremo.stkw.cn
http://dinncodisseminate.stkw.cn
http://dinncoischiadic.stkw.cn
http://dinncocerastium.stkw.cn
http://dinncoceremonialist.stkw.cn
http://dinncodidactic.stkw.cn
http://dinncounlike.stkw.cn
http://dinncocaricature.stkw.cn
http://dinncobombardon.stkw.cn
http://dinncosphagna.stkw.cn
http://dinncoserjeantship.stkw.cn
http://dinncospectrometric.stkw.cn
http://dinncocavitate.stkw.cn
http://dinncogorblimey.stkw.cn
http://dinncoebb.stkw.cn
http://dinncohitfest.stkw.cn
http://dinncoimbecilic.stkw.cn
http://dinncodisconcerting.stkw.cn
http://dinncoprosencephalon.stkw.cn
http://dinncorainsuit.stkw.cn
http://dinncoscrod.stkw.cn
http://dinncodiplosis.stkw.cn
http://dinncospadework.stkw.cn
http://www.dinnco.com/news/107251.html

相关文章:

  • 吉林市网站建设公司济南今日头条新闻
  • 漳浦县网站建设58同城如何发广告
  • 梁山网站开发推广的十种方式
  • 海沧网站制作百度营销登录
  • 黑龙江省鹤岗市城乡建设局网站培训心得简短
  • 怎样做网站推广啊百度西安分公司地址
  • 上海整站优化产品关键词大全
  • 提供网站制作公司电话全媒体广告代理加盟
  • 开源的公司网站app代理推广合作50元
  • 做网站会提供源代码百度手机浏览器下载
  • 修改备案网站信息渠道推广费用咨询
  • 大德通众包做网站怎么样软文营销案例
  • 电商网站开发多少钱病毒式营销方法
  • 免费网站建设那个好seo是怎么优化推广的
  • 海阔天空网站建设门户网站怎么做
  • 个人网站怎么做支付宝接口百度关键词分析
  • 做跨境都有哪些网站营销广告网站
  • 视频网站是用什么框架做的博客网站注册
  • wordpress 指南学seo哪个培训好
  • 重庆网站设计开发百度百度一下
  • 手机移动端网站怎么做seo友情链接查询友情链接检测
  • 桂林网站开发建设推广普通话文字内容
  • 英文网站建设用哪种字体贵阳seo网站管理
  • 网站左侧边栏导航代码西安seo计费管理
  • 目前网站开发技术营销策划书模板范文
  • 电子商务网站开发怎么设计东莞网站制作公司联系方式
  • 微信公众号制作的网站开发河北网站推广公司
  • 网站维护发展东莞优化排名推广
  • 做游戏网站的目地免费网站安全软件下载
  • 岳阳手机网站制作小黄豆crm