通过异步请求上传文件到七牛云

在这里插入图片描述

一、准备工作

创建账号、创建空间这种大家自己研究就行(有手就行)
只需要根据步骤查找对应文档

  1. 从服务端获取七牛云上传的token,生成token参考官方文档
    在这里插入图片描述

  2. 在七牛云文档查找上传的存储区域
    在这里插入图片描述

  3. 在七牛云控制台找到空间管理的cdn加速域名
    在这里插入图片描述

二、后台token获取

基于准备工作1中,我们基于自己的公钥私钥与存储空间获取了token,我们需要后台书写代码返回token给前端

FileUploadController.java

 import com.qiniu.util.Auth;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
public class FileUploadController {@RequestMapping("/file/upload")@ResponseBodypublic String token(String fileName){String accessKey = "你的公钥";String secretKey = "你的私钥";String bucket = "你的存储空间名称";String key = fileName;Auth auth = Auth.create(accessKey, secretKey);String upToken = auth.uploadToken(bucket, key);//这返回的格式任意反正前端能获取到就行return "{\"token\":\""+upToken+ "\"}";}
}

三、前端文件上传

因为前端实现文件上传技术有很多,所以给大家分别写了几个demo

通用页面

<html>
<script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/qiniu-js/3.1.2/qiniu.min.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">//生成一个用不重复的IDfunction GenNonDuplicateID() { // 生成32位长度的字符串var str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // 可以作为常量放到random外面var result = "";for (var i = 0; i < 32; i++) {result += str[parseInt(Math.random() * str.length)];}return result;}//获取文件后缀function getType(file) {var filename = file;var index1 = filename.lastIndexOf(".");var index2 = filename.length;var type = filename.substring(index1, index2);return type;}$(function() {$("#upload").on("click", function() {var obj = $("#file");var fileName = obj.val(); //上传的本地文件绝对路径var suffix = fileName.substring(fileName.lastIndexOf("."), fileName.length); //后缀名var file = obj.get(0).files[0]; //上传的文件var size = file.size > 1024 ? file.size / 1024 > 1024 ? file.size / (1024 * 1024) > 1024 ? (file.size / (1024 *1024 * 1024)).toFixed(2) + 'GB' : (file.size /(1024 * 1024)).toFixed(2) + 'MB' : (file.size /1024).toFixed(2) + 'KB' : (file.size).toFixed(2) + 'B'; //文件上传大小$.ajax({type: 'post',url: "http://localhost:8080/file/upload",//请求后台获取tokendataType: 'json',success: function(result) {//获取后台返回的tokenconsole.log(result.token);//基于前端技术将文件上传至七牛云//把下面对应的demo粘贴过来(注意修改参数)},error: function() { //服务器响应失败处理函数alert("服务器繁忙");}});})})
</script>
<body>
<input type="file" name="image" id="file" accept="image/*">
<input type="button" id="upload" value="upload">
<img id="image" src="#" alt="">
</body>
</html>

3.1 使用axios上传文件

cdn加速域名+上传成功返回的key就是图片的url地址

          let fd= new FormData()fd.append('file', file, file.name );//file是文件对象fd.append('token', token ); //从后端获取到的token       let ajax = axios.create({withCredentials: false});ajax({url: 'https://up-z1.qiniup.com',//根据前面存储空间存储区域选择对应的url 比如我的是华北的data: fd,method: 'POST',onUploadProgress: (progress)=> {//根据前面文件大小与返回参数中的数据可以做进度条},}).then((res)=>{console.log(res)let url  = 'https://se8mhjfs0.hb-bkt.clouddn.com/' + res.data.key //  这个是上图三的地址 用于图片上传后的回显}).catch((res)=>{console.log(res)     })

3.2 使用jquery的ajax上传文件

					let fd= new FormData()fd.append('file', file,GenNonDuplicateID() + getType(fileName) );//file是文件对象fd.append('token', token ); //从后端获取到的token//七牛云上传$.ajax({url:"https://up-z1.qiniup.com",type:'POST',data:fd,cache: false, //需要这个配置contentType: false, //需要这个配置processData: false, //需要这个配置success:function(res){console.log(res)let url  = 'https://se8mhjfs0.hb-bkt.clouddn.com/' + res.data.key //  这个是上图三的地址 用于图片上传后的回显},error:function(){console.log('数据有误')}});

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21957.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将 KNX 接入 Home Assistant 之三 功能配置

万事俱备只欠东风&#xff0c;不管是ETS还是HA都需要配置才能使用。还是期待以后发展到可以开箱即用。 KNXD的配置 在 《将 KNX 接入 Home Assistant 之二 准备软件》&#xff0c;我们已经装好了KNXD的插件&#xff0c;现在就需要进行配置了 配置的界面 注意图中加框的选择&…

UI 自动化测试(Selenuim + Java )

关于 UI 自动化测试工具 selenuim Java 的环境搭建推荐看SeleniumJava 环境搭建 什么是自动化测试&#xff1f; 自动化测试指软件测试的自动化&#xff0c;在预设状态下运行应用程序或者系统&#xff0c;预设条件包括正常和异常&#xff0c;最后评估运行结果。将人为驱动的测…

分享两种论文降重最有效的方法(论文降重网站)

论文降重最有效的方法可以分为手动方法和使用降重网站两种方法。以下是详细的分析和归纳&#xff1a; 手动方法 删减冗余内容&#xff1a;对于论文中的某些内容&#xff0c;特别是信息冗余或不必要的描述&#xff0c;可以通过删减和简化来减少篇幅。确保每一段落和每一个例子都…

[FreeRTOS 基础知识] 栈

文章目录 栈的概念使用C语言实现 栈通过代码反汇编解析 栈 栈的概念 所谓的栈就是一块空间的内存&#xff0c;CPU的SP寄存器指向它&#xff0c;它可以用于函数调用&#xff0c;局部变量&#xff0c;多任务系统里保存现场。 使用C语言实现 栈 volatile int num0;int fun_b(vol…

i.MX8MP平台开发分享(RDC资源分配控制器篇)

1.spec RDC 配置信息被发送到结构端口、内存垫片、信号控制器和外设&#xff0c;以根据域分配控制访问。 结构使用与每个端口相关的域标识符&#xff0c;将此信息与总线事务一起包含在内。当从属加密垫圈遇到总线事务时&#xff0c;它会将事务域 ID 与 RDC 提供的允许域列表进…

串口通讯、RS485、232、SPI、I2C

串行通信与并行通信的比较 1.同步和异步 同步串口通信&#xff08;Synchronous Serial Communication&#xff09; 异步串口通信&#xff08;Asynchronous Serial Communication&#xff09; 比较 2.全双工&#xff0c;半双工&#xff0c;单工 全双工&#xff08;Full Du…

Midjourney绘画参数设置详解

在数字艺术和设计领域&#xff0c;Midjourney是一款强大的绘画工具&#xff0c;它允许艺术家和设计师以数字方式创作出精美的图像。为了充分发挥Midjourney的潜力&#xff0c;正确设置其绘画参数至关重要。本文将深入探讨Midjourney的绘画参数设置&#xff0c;帮助用户更好地掌…

第十五届蓝桥杯物联网试题(国赛)

好&#xff0c;很好&#xff0c;国赛直接来个阅读理解&#xff0c;我猛做4个小时40分钟&#xff0c;cpu都干冒烟了&#xff0c;也算是勉强做完吧&#xff0c;做的很仓促&#xff0c;没多检查就交了&#xff0c;方波不会&#xff0c;A板有个指示灯没做&#xff0c;其他应该都还凑…

使用EMQX搭建MQTT服务

简介&#xff1a;EMQX 是一款开源的大规模分布式 MQTT 消息服务器&#xff0c;功能丰富&#xff0c;专为物联网和实时通信应用而设计。EMQX 5.0 单集群支持 MQTT 并发连接数高达 1 亿条&#xff0c;单服务器的传输与处理吞吐量可达每秒百万级 MQTT 消息&#xff0c;同时保证毫秒…

内存动态管理

内存动态管理 1 .为什么要有动态内存分配 我们已经掌握的内存开辟⽅式有&#xff1a; int val 20;//在栈空间上开辟四个字节 char arr[10] {0};//在栈空间上开辟10个字节的连续空间但是上述的开辟空间的⽅式有两个特点&#xff1a; • 空间开辟⼤⼩是固定的。 • 数组在…

SQL Developer 小贴士:备份和恢复连接信息

问题与概念 有时候SQL Developer需要重装&#xff0c;能备份和恢复连接信息就比较重要。 SQL Developer提供连接的导出和导入功能。 导出连接 第一步&#xff1a;选择连接。 第2步&#xff1a;指定输出文件&#xff0c;例如sqldconns.json 第3步&#xff1a;因为连接中可…

netty LengthFieldBasedFrameDecoder 根据动态长度分包粘包

如下数据格式 在方法&#xff1a; // Integer.MAX_VALUE, // maxFrameLength: 最大允许的帧长度// 4, // lengthFieldOffset: 长度字段在帧中的偏移量&#xff0c;这里是在帧头之后// 4, // lengthFieldLength: 长度字段的长度&#xff0c;4字节表示32位整数// 0, // …

CentOS7配置国内清华源并安装docker-ce以及配置docker加速

说明 由于国内访问国外的网站包括docker网站&#xff0c;由于种种的原因经常打不开&#xff0c;或无法访问&#xff0c;所以替换成国内的软件源和国内镜像就是非常必要的了&#xff0c;这里整理了我安装配置的基本的步骤。 国内的软件源有很多&#xff0c;这里选择清华源作为…

2024下半年Meme币趋势分析

随着加密货币市场的不断演变&#xff0c;Meme币在过去几年中引起了广泛关注。虽然这些数字资产最初因其搞笑和讽刺的性质而受到欢迎&#xff0c;但它们在市场上的表现和投资潜力也逐渐被重视。2024年下半年&#xff0c;Meme币市场将迎来新的趋势和挑战。本篇文章将探讨Meme币的…

Leecode---技巧---颜色分类、下一个排列、寻找重复数

思路&#xff1a; 遍历一遍记录0,1,2的个数&#xff0c;然后再遍历一次&#xff0c;按照0,1,2的个数修改nums即可。 class Solution { public:void sortColors(vector<int>& nums){int n0 0, n1 0, n2 0;for(int x: nums){if(x0) n0;else if(x1) n1;else n2;}for…

大容量异步电机直接转矩(DTC)控制matlab仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; DTC简介 直接转矩控制的基本思想就是利用逆变器所产生的空间电压矢量来控制定子磁链的旋转速度&#xff0c;通过控制定子磁链的走停来改变定子磁链的平均旋转速度的大小&#xff0c;从而改变磁通角的大小进而…

若依前后端分离项目(一)环境搭建

一、代码下载 RuoYi-Vue: &#x1f389; 基于SpringBoot&#xff0c;Spring Security&#xff0c;JWT&#xff0c;Vue & Element 的前后端分离权限管理系统&#xff0c;同时提供了 Vue3 的版本 其中ruoyi-ui为前端项目 二、数据库 1、MySQL 创建数据库ry-vue并导入数据…

IGraph使用实例——贝尔曼-福特算法(求解单源最短路径)

1 概述 本文中求解最短路径使用的方法是igraph中基于贝尔曼-福特算法&#xff08;Bellman-Ford算法&#xff09;。Bellman-Ford算法是一种用于在加权图中找到从单个源点到所有其他顶点的最短路径的算法。这个算法可以处理包含负权重边的图&#xff0c;但不能处理有负权重循环的…

Java集合基础知识点系统性总结篇

目录 集合一、图解集合的继承体系&#xff1f;&#xff08;[图片来源](https://www.cnblogs.com/mrhgw/p/9728065.html)&#xff09;点击查看大图二、List,Set,Map三者的区别&#xff1f;三、List接口的实现3.1、Arraylist 、 LinkedList、Vector3.2、Arraylist 、 LinkedList、…

护网不仅要有好技术、更要有个好身体

护网医疗急救包 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 2024年的护网已经很接近了&#x…