以下是关于后端对于附件从存储服务器改为存储到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,关于富文本中贴图的常见需求,以前采用的方式是:

  1. 贴图请求文件上传接口上传到服务器中  
  2. 接口返回资源在服务器中路径url
  3. 富文本控件生成的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后前端对于文件操作的处理方式的更多相关文章

  1. 爬虫文件存储:txt文档,json文件,csv文件

    5.1 文件存储 文件存储形式可以是多种多样的,比如可以保存成 TXT 纯文本形式,也可以保存为 Json 格式.CSV 格式等,本节我们来了解下文本文件的存储方式. 5.1.1 TXT文本存储 将数 ...

  2. 干货 | 玩转云文件存储——利用CFS实现web应用的共享访问

    京东云文件服务(Cloud File Service,以下简称:CFS)是一种高可靠.可扩展.可共享访问的全托管分布式文件系统.它可在不中断应用服务的情况下,根据您对文件系统的使用,按需扩展或缩减,并 ...

  3. IOS开发--数据持久化篇之文件存储(一)

    前言:个人觉得开发人员最大的悲哀莫过于懂得使用却不明白其中的原理.在代码之前我觉得还是有必要简单阐述下相关的一些知识点. 因为文章或深或浅总有适合的人群.若有朋友发现了其中不正确的观点还望多多指出,不 ...

  4. Hadoop小文件存储方案

    原文地址:https://www.cnblogs.com/ballwql/p/8944025.html HDFS总体架构 在介绍文件存储方案之前,我觉得有必要先介绍下关于HDFS存储架构方面的一些知识 ...

  5. 搭建基于 HDFS 碎片文件存储服务

    安装 JDK HDFS 依赖 Java 环境,这里我们使用 yum 安装 JDK 8,在终端中键入如下命令: yum -y install java-1.8.0-openjdk* 使用如下命令查看下 ...

  6. 什么是文件存储NAS

    阿里云文件存储(Network Attached Storage,简称 NAS)是面向阿里云 ECS 实例.E-HPC 和容器服务等计算节点的文件存储服务. 定义 阿里云文件存储 NAS 是一个可共享 ...

  7. 分布式文件存储:FastDFS简单使用与原理分析

    引言 FastDFS 属于分布式存储范畴,分布式文件系统 FastDFS 非常适合中小型项目,在我接手维护公司图片服务的时候开始接触到它,本篇文章目的是总结一下 FastDFS 的知识点. 用了 2 ...

  8. Asp-Net-Core开发笔记:使用NPM和gulp管理前端静态文件

    前言 本文介绍的是AspNetCore的MVC项目,WebApi+独立前端这种前后端分离的项目就不需要多此一举了~默认前端小伙伴是懂得使用前端工具链的. 为啥要用MVC这种服务端渲染技术呢? 简单项目 ...

  9. Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...

随机推荐

  1. 谈谈我对证券公司一些部门的理解(前、中、后台)[z]

    [z]https://blog.csdn.net/UniRong/article/details/79289947 文中对各大部门的分析都是从作者多年经历总结出来的有感之谈,尤其是前台的6大部门(经纪 ...

  2. curl获取远程页面

    // 创建一个新cURL资源$ch = curl_init(); // 设置URL和相应的选项$options = array(CURLOPT_URL => 'http://www.w3csch ...

  3. html里 调整字间距

    使用字与字的间距可设置letter-spacing属性实现,例如:1.p{letter-spacing:15px;}即表示<p>这是一段文字</p>标签里的文字间距为15px. ...

  4. Docker监控:最佳实践以及cAdvisor和Prometheus监控工具的对比

    在DockerCon EU 2015上,Brian Christner阐述了“Docker监控”的概况,分享了这方面的最佳实践和Docker stats API的指南,并对比了三个流行的监控方案:cA ...

  5. [ML] Feature Transformers

    方案选择可参考:[Scikit-learn] 4.3 Preprocessing data 代码示范可参考:[ML] Pyspark ML tutorial for beginners 本篇涉及:Fe ...

  6. delphi设置鼠标图形

    //Screen.Cursor := crHourGlass;//忙 //Screen.Cursor := crDefault;//不忙时

  7. 8. find

    find使用 find命令的主要作用是对树形目录层次结构进行彻底检查. find命令的一般格式: find pathname -expressions     find常用表达式 在当前文件夹中找出名 ...

  8. Qt 字符映射表 显示图标

    一.利用字符映射表segmdl2.ttf,窗体显示字符图片. 在win10里面搜“字符映射表”,选择字体segmdl2.ttf,查看图标对应得16进制值.把此字体拷贝到程序的目录下. 二.使用 #if ...

  9. DRF视图-5个扩展类以及GenericAPIView基类

    视图 5个视图扩展类 视图拓展类的作用: 提供了几种后端视图(对数据资源进行曾删改查)处理流程的实现,如果需要编写的视图属于这五种,则视图可以通过继承相应的扩展类来复用代码,减少自己编写的代码量. 这 ...

  10. JoinableQueue队列,线程,线程于进程的关系,使用线程,线程的特点,守护线程,线程的互斥锁,死锁问题,递归锁,信号量

    1.JoinableQueue队列 JoinableQueue([maxsize]):这就像是一个Queue对象,但是队列允许项目的使用者通知生成者项目已经被成功处理.通知进程是使用共享的信号和条件变 ...