文件存储Mongo DB后前端对于文件操作的处理方式
以下是关于后端对于附件从存储服务器改为存储到Mongo DB后,前端对于一些常见需求处理方式的修改:包括文件上传下载和富文本编辑中的贴图实现。
一、文件上传(记录关于fetch中post请求Content-Type的四种类型)
- application/x-www-form-urlencoded
浏览器的原生 form 表单默认提交方式,提交的数据按照 key1=val1&key2=val2 的方式进行编码,key 和 val 都进行了 URL 转码
- multipart/form-data
使用表单上传文件时的请求类型,会生成了一个 boundary(边界) 用于分割不同的字段,为了避免与正文内容重复, Content-Type 会指明数据是以 mutipart/form-data 来编码和本次请求的 boundary内容。
注意:关于boundary有个坑就是如果自己在文件上传的接口请求头中配置Content-Type为multipart/form-data后,请求失败,实际请求头没有产生boundary,如下:

然后删除请求头相关设置(Content-type)后请求成功了,实际请求头如下:


- application/json
服务端消息主体是序列化后的 JSON 字符串,浏览器中请求头相关信息显示如下:

- text/xml
不常用,发送xml格式文件或流和webservice请求
二、实现文件下载(接口返回文件流)
一般后端关于附件都是直接存储在服务器中然后返回前端一个资源url,现后端采用将附件存储在Mongo DB中,从而与前端的交互都改为了文件流的形式
接口返回文件流格式如下:


接下来就是前端的处理了,在React项目中可以先引入downloadjs插件实现附件下载,插件安装可参考:https://www.npmjs.com/package/downloadjs
//先在组件文件中引入downloadjs
import download from 'downloadjs' //组件中附件下载相关方法
downloadFileByFileName (fileName) {
let url = `/issueservice/downloadFileByFileName?fileName=${fileName}`;
return fetch(url, {
mode: "no-cors",
method: 'POST'
}).then(function(resp) {
return resp.blob();
}).then(function(blob) {
download(blob,fileName,"text/csv"); // downloadjs控件方法的使用
});
}
三、实现富文本中贴图(img显示base64格式数据图片)
React项目中富文本控件为BraftEditor,关于富文本中贴图的常见需求,以前采用的方式是:
- 贴图请求文件上传接口上传到服务器中
- 接口返回资源在服务器中路径url
- 富文本控件生成的Img的src中引入上面返回的url,从而实现富文本内容可以展示在浏览器
现因为文件存储方式的变更,前端处理方式如下:
// 富文本编辑插入图片的回调
handleUpLoad = param => {
let reader = new FileReader();
reader.readAsDataURL(param.file);
reader.onload = function() {
param.success({url: reader.result})
}
};
采用以上方法后,实际Img标签中src引入的内容参考如下:

文件存储Mongo DB后前端对于文件操作的处理方式的更多相关文章
- 爬虫文件存储:txt文档,json文件,csv文件
5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...
- 干货 | 玩转云文件存储——利用CFS实现web应用的共享访问
京东云文件服务(Cloud File Service,以下简称:CFS)是一种高可靠.可扩展.可共享访问的全托管分布式文件系统.它可在不中断应用服务的情况下,根据您对文件系统的使用,按需扩展或缩减,并 ...
- IOS开发--数据持久化篇之文件存储(一)
前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...
- Hadoop小文件存储方案
原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...
- 搭建基于 HDFS 碎片文件存储服务
安装 JDK HDFS 依赖 Java 环境,这里我们使用 yum 安装 JDK 8,在终端中键入如下命令: yum -y install java-1.8.0-openjdk* 使用如下命令查看下 ...
- 什么是文件存储NAS
阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例.E-HPC 和容器服务等计算节点的文件存储服务. 定义 阿里云文件存储 NAS 是一个可共享 ...
- 分布式文件存储:FastDFS简单使用与原理分析
引言 FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点. 用了 2 ...
- Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件
前言 本文介绍的是AspNetCore的MVC项目,WebApi+独立前端这种前后端分离的项目就不需要多此一举了~默认前端小伙伴是懂得使用前端工具链的. 为啥要用MVC这种服务端渲染技术呢? 简单项目 ...
- Android数据存储之Android 6.0运行时权限下文件存储的思考
前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...
随机推荐
- Mac下mysql服务端密码重置及环境配置
一 停止mysql服务 关闭MySQL服务的操作: 苹果->系统偏好设置->最下边点MySQL 在弹出页面中 关闭mysql服务(点击stop mysql server) 二 进入终端,命 ...
- VSCode查询快捷键对应功能技巧
- javascrip参考资料
阮一峰: http://javascript.ruanyifeng.com/ 廖雪峰: https://www.liaoxuefeng.com/ Mozila: https://developer.m ...
- Nginx日志中的金矿
http://www.infoq.com/cn/articles/nignx-log-goldmine/
- java数据结构之CopyOnWriteArrayList和CopyOnWriteArraySet
一.什么是CopyOnWrite CopyOnWrite(写时复制)简称COW,这是一种利用读写分离的思想来实现线程安全的程序设计思路.顾名思义该思想就是在写的时候将原数据复制一份,然后在新的数据中进 ...
- Windows配置jdk环境变量
配置环境变量 前置条件:已经安装jdk以及jre 操 作:右击"我的电脑"-->"属性"-->"高级系统设置"-->&qu ...
- 部署 --- Docker
Docker学习 介绍 : Docker速度更快.性能更高.操作更易.我们开发的不同的程序APP是需要在操作系统中单独的环境中隔离运行的. 为了能让我们不同的程序可以在隔离的环境中运行:我们可以使用虚 ...
- 安装horizon
在控制节点上安装 controllerHost='controller' ADMIN_PASSWD='Ideal123!' 1.安装dashboard组件 yum -y install opensta ...
- win10下查看进程,杀死进程
参考链接:https://blog.csdn.net/qq_36819098/article/details/80262482
- [loj#2005][SDOI2017]相关分析 _线段树
「SDOI2017」相关分析 题目链接:https://loj.ac/problem/2005 题解: 把上面的式子拆掉,把下面的式子拆掉. 发现所有的东西都能用线段树暴力维护. 代码: #inclu ...