前端文件流相关

news2025/1/12 16:08:02

XMLHttpRequest

// XMLHttpRequest对象用于与服务器交互
// XMLHttpRequest可以在不刷新页面的情况下请求特定URL, 获取数据
// XMLHttpRequest属性responseType是一个枚举字符串值, 用于指定响应中包含的数据类型
// 如果将 responseType的值设置为空字符串, 则使用 text 作为默认值

type XMLHttpRequestResponseType = "" | "arraybuffer" | "blob" | "document" | "json" | "text";
// "arraybuffer", response 是一个包含二进制数据的 ArrayBuffer对象
// "blob", response 是一个包含二进制数据的 Blob 对象

// 在 axios 的配置中,也有responseType, 默认是 "json"

AJAX

AJAX stands for Asynchronous JavaScript And XML.
In a nutshell, it is the use of the XMLHttpRequest object to communicate with servers.
It can send and receive information in various formats, including JSON, XML, HTML, and text files.
AJAX’s most appealing characteristic is its “asynchronous” nature, which means it can communicate with the server, exchange data, and update the page without having to refresh the page.

URL.createObjectURL(Object)

参数:A FileBlob,or MediaSource object to create an object URL for.
返回值:A string containing an object URL that can be used to reference the contents of the specified source object.

The URL.createObjectURL() static method creates a string containing a URL representing the object given in the parameter.
The URL lifetime is tied to the document in the window on which it was created.
To release an object URL, call revokeObjectURL().

传入一个blob对象,会返回一个字符串,其中有一个代表blob对象的URL。
在这里插入图片描述
src也可以使用这个字符串去展示图片,视频等。
在这里插入图片描述

Attention:
Each time you call createObjectURL(), a new object URL is created, even if you've already created one for the same object.
Each of these must be released by calling URL.revokeObjectURL() when you no longer need them.

MIME类型

A media type (also known as a Multipurpose Internet Mail Extensions or MIME type) indicates the nature and format of a document, file, or assortment of bytes.
媒体类型(也称为“多用途Internet邮件扩展”或“MIME”类型)指示文档、文件或字节流的性质和格式。
Browsers use the MIME type,not the file extension,to determine how to process a URL,so it’s important that web servers send the correct MIME type in the response’s Content-Type header.
浏览器通常使用 MIME 类型(而不是文件扩展名)来确定如何处理 URL,因此 Web 服务器在响应头中添加正确的 MIME 类型非常重要。
If this is not correctly configured,browsers are likely to misinterpret the contents of files,sites will not work correctly,and downloaded files may be mishandled.
如果配置不正确,浏览器可能会曲解文件内容,网站将无法正常工作,并且下载的文件也会被错误处理。
A MIME type most-commonly consists of just two parts: a type and a subtype,separated by a slash。

# The type represents the general category.
# The subtype identifies the exact kind of data of the specified type the MIME type represents.
type/subtype

# An optional parameter can be added to provide additional details.
# Example:
# To specify a UTF-8 text file, the MIME type text/plain;charset=UTF-8 is used.
# MIME types are case-insensitive but are traditionally written in lowercase.
# The parameter values can be case-sensitive.
type/subtype;parameter=value

MIME types/MDN文档
HTTP_Documention
axios官网

前端

// 一般情况下, 这种形式传数据传的都是JSON
// 但是此时我们的parameter是FormData对象, 开发者工具显示不再是JSON, 可能axios自动判断解析了吧
export function uploadPicture (parameter) {
    return request({
      url: api.upload,
      method: 'post',
      data: parameter
    })
}
    uploadImage (file) {
      const _this = this
      const formData = new FormData()
      formData.append('file', file.file)	// file.file是一个 File对象
      uploadPicture(formData)
        .then(function (res) {
          _this.model.imgName = res.data.fileName
        }).finally(function () {
        })
    }

这样就实现了文件上传
在这里插入图片描述
在这里插入图片描述

后端

直接返回一个对象,然后使用@ResponseBody,响应头的content-type就是application/json

// 下载文件时, 响应头设置为`application/octet-stream`和`multipart/form-data`都可以

//        response.setContentType("multipart/form-data");
        response.setContentType("application/octet-stream");	// 这两个响应头都可以
        response.setHeader("Content-Disposition",   // url编码一下,不然中文文件名不支持
                "attachment;fileName=" + URLEncoder.encode(downloadName, "utf-8"));



// 目前还没发现这个设置了有什么用, 暂时不设置也可以
The no-cache response directive indicates that the response can be stored in caches, but the response must be
validated with the origin server before each reuse, even when the cache is disconnected from the origin server.

If you want caches to always check for content updates while reusing stored content, no-cache is the directive to use.
It does this by requiring caches to revalidate each request with the origin server.

Note that `no-cache` does not mean "don't cache". `no-cache` allows caches to store a response but requires
them to revalidate it before reuse. If the sense of "don't cache" that you want is actually "don't store", then
`no-store` is the directive to use.

//        response.setHeader("Pargam","no-cache"); 兼容只支持 HTTP/1.0 协议的缓存服务器
//        response.setHeader("Cache-Control","no-cache");
/**
 * @file bolb下载工具
 * 文件下载工具函数, 自动添加下载dom元素并执行下载
 * @param {Object} blobData 下载内容的数据流
 * @param {string} fileName 下载文件保存名称
 */
export function downloadBlobFile(blobData, fileName) {
    const blob = new Blob([blobData]);
    const downloadElement = document.createElement('a');
    const href = window.URL.createObjectURL(blob);
    downloadElement.href = href;
    downloadElement.download = fileName;
    document.body.appendChild(downloadElement);
    downloadElement.click();
    document.body.removeChild(downloadElement);
    window.URL.revokeObjectURL(href);
}

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

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

相关文章

Linux网络编程基础

Linux网络编程基础一、基础概念的介绍1.1 网卡的介绍1.2 mac地址 六个字节 48位1.3 ip地址 32位 四个字节 ipv41.4 端口二、网络模型2.1 OSI七层模型2.2 TCP/IP模型2.3 协议2.4 网络通信过程2.4 arp协议2.5 网络设计模式一、基础概念的介绍 1.1 网卡的介绍 1.2 mac地址 六个字…

开源轻量堡垒机——Teleport的安装配置和使用

一、堡垒机简介 1.1、现状 目前随着信息化的发展,越来越多的企业开始有更多的服务器、业务资源,有更多样化的员工,拥有更多的账号;导致访问混乱化,越权访问难以规范;甚至恶意命令攻击事件(如删…

【数据结构】带头节点双向循环链表

目录 顺序表和链表的区别 带头双向循环链表分析 带头双向循环链表结构: 创建一个节点 哨兵位头节点 打印链表中的值 在pos前插入 删除pos位置的节点 尾插 尾删 头插: 头删 链表元素查找 总代码 List.h文件 List.c文件 test.c文件 顺序表和…

科技云报道:历经四年,RPA走向同质化?

科技云报道原创。 经过多年发展,全球RPA市场已经初具规模。 据Transparency Market Research研究预测,预计到2024年,全球RPA市场规模将达到50亿美元,实现61.3%的年复合增长率。 RPA在亚洲市场起步晚于欧美市场,但从2…

SpringCloud系列(二)Ribbon 负载均衡的原理及详细流程

关于负载均衡这个概念在上一篇文章中有所提到,在消费者远程调用之前有一个重要的环节就是负载均衡,那么为什么要进行负载均衡呢?其原理及实现流程如何?   其实 Ribbon 负载均衡可以认为是一种策略,也可以说是某种规则…

SpringBoot+Vue项目实现身体健康诊疗系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

ajax尚硅谷笔记——跨域请求、axios发送ajax请求、jquery发送ajax请求

去恶补了ajax知识 一、ajax简介 1、ajax全称为Asynchronous JavaScript And XML,就是异步的JS 和XML 2、通过AJAX可以再浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据 3、ajax不是新的编程语言,而是一种将现有的标准…

《Linux内核设计与实现》读书笔记

《Linux内核设计与实现》读书笔记第三章 进程管理第四章 进程调度第五章 系统调用第六章 内核数据结构第七章 中断和中断处理第八章 下半部和推后执行的工作第九章 内核同步介绍第十章 内核同步方法第十一章 定时器和时间管理第十二章 内存管理第十三章 虚拟文件系统第十四章 块…

Java:2022年全球使用的15种最流行的Java应用

到今年为止,Java已经有25年的历史了,尽管引入了许多更新、更华丽的语言和工具,但它仍然是当今最流行的编程语言之一。这们老语言一直在蹒跚前行,享受着当今众多程序员和开发人员的爱。 Java有许多优势,再加上它的广泛使…

transformer论文及其变种

文章目录transformer模型细节slf-attn & multi-head attnabs positionwhy slf-attntransformer-XLInformer细节probSparse slf-attnLongformer细节GPT-generative pre-train模型结构下游任务:fine-tuningtransformer motivation:序列映射的任务&…

高速串行信号串接电容放在发送端还是接收端

在设计一些高速的串行信号,比如PCIE,STATA,USB3.0等,在差分信号线上面常常都会串接一个电容 这个电容主要有如下几个方面的作用: 1.滤除信号的直流分量,使信号关于0电平对称; 因为很多高速信号…

持续集成环境-maven、tomcat安装和配置

在Jenkins 集成环境中,用Maven编译、打包项目 壹,安装Maven 安装在jenkins服务器上 官方下载地址 上传安装包 解压 : tar -zxvf apache-maven-3.6.2-bin.tar.gzmkdir -p /opt/maven #创建目录 mv apache-maven-3.6.2/* /opt/maven #移…

Vue3中v-if与v-for、多事件处理器即案件修饰符、$attrs、$root和$parent

文章目录1. v-if与v-for及动态属性ref的使用2. 多事件处理器及按键修饰符3. $attrs包含class和style4. \$root和$parent1. v-if与v-for及动态属性ref的使用 在 vue3 中,当 v-if 与 v-for 一起使用时,v-if 具有比 v-for 更高的优先级。 下面是 v-for 结…

ubuntu20.04搭建janus服务器

目录 一、安装依赖项 二、编译janus v1.1.0 三、生成ssl证书 四、编译配置nginx 五、编译turnserver 六、配置janus文件 七、编译janus报错记录 参考资料: 环境是ubuntu20.04 使用最新的janus v1.1.0代码。 一、安装依赖项 sudo apt-get install aptitude…

Linux搭建Rabbitmq集群

1.1 添加其他用户 133、134、135 因为 guest 用户只能在本机访问,添加一个 admin 用户,密码也是 admin ./rabbitmqctl add_user admin admin ./rabbitmqctl set_user_tags admin administrator ./rabbitmqctl set_permissions -p / admin “." &qu…

嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(下)

上节我们分享了MVC框架、状态模式组合在实际开发中的应用,它能够让我们的软件设计流程更加的清晰、易于维护: 嵌入式软件设计之美-以实际项目应用MVC框架与状态模式(上) 那么这一节我们就直接开门见山,从接下来的这个开源项目分享开始&…

An2023(Animate2023)中文版软件下载「附带安装教程」

animate2023版本已经更新,此次的最新版本中,拥有大量的新特性,特别是在继续支持Flash SWF、AIR格式的同时,还会支持HTML5Canvas、WebGL,并能通过可扩展架构去支持包括SVG在内的几乎任何动画格式,更新推出了…

MySQL数据库期末考试试题及参考答案(06)

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 一、 填空题 普通索引使用KEY或____定义。在MySQL中,DROP VIEW语句用于____。MySQL中常见的索引大致分为普通索引、 ____ 、 ____ 、全文索引、空间索引。只有在…

《STL源码剖析》笔记——allocator

六大组件间关系 部分STL文件包含关系 allocator包含于中: 实际实现于三个文件 : 1.stl_construct.h :对象的构造和析构 2.stl_alloc.h空间配置和释放 3.stl_uninitialized.h 空间配置器(allocator) 1.什么是空间配置器&#xff…

MindFusion JS Chart 2.0 Crack

一个用于图表、仪表和仪表板的库。MindFusion JS Chart 结合了 2D 和 3D 图表、财务图表、仪表和仪表板。优雅的 API、丰富的事件集、无限数量和类型的数据系列以及您在JavaScript和HTML中创建完美数据可视化可能需要的一切。 特征 常见图表类型 创建交互式线图、 面积图、 气泡…