以下是关于后端对于附件从存储服务器改为存储到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. hibernate一对一映射

    package loaderman.c_one2one; // 身份证 public class IdCard { // 身份证号(主键) private String cardNum;// 对象唯一 ...

  2. C# 后台服务 web.config 中 项“ConnectionString”已添加。问题

    是自己在一网站下建了虚拟目录.原本网站为空,后来自己改了路径,有了默认配置很久后打开原本ok的虚拟目录,坑爹了.杯具了.代码:ConfigurationManager.ConnectionString ...

  3. mac被锁有pin码的解锁方法

    停用规律: 错误5次密码停用1分钟 再错误3次停用5分钟 在错误1次就停用15分钟 再错误1次就是60分钟了,而且还没输入框了,这时候我们要通过按 option,commond这2个按钮来唤起输入框 ...

  4. python同时执行两个函数

    使用两个线程同时执行两个函数, def fun1(): while True: time.sleep(2) print("fun1") def fun2(): while True ...

  5. Neither BindingResult nor plain target object for bean name 'command' available as request attribute

    最近用JSR303在表单提交时使用Java Bean Validation验证数据.报错堆栈如下: java.lang.IllegalStateException: Neither BindingRe ...

  6. 【Abode Air程序开发】移动设备、桌面和浏览器应用程序开发的差异

    移动设备.桌面和浏览器应用程序开发的差异 在移动设备应用程序中使用 Spark 和 MX 组件的限制 移动设备应用程序在性能方面的注意事项 浏览器  将应用程序部署为 SWF 文件,以用于在浏览器中运 ...

  7. Sql 语句收集——行转列

    SQL行转列汇总 PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in ...

  8. memcached命令行、Memcached数据导出和导入

    1.memcached命令行 telnet 127.0.0.1 11211set key2 0 30 2abSTOREDget key2VALUE key2 0 2abEND  如: set key3 ...

  9. 【LOJ】#3120. 「CTS2019 | CTSC2019」珍珠

    LOJ3120 52pts \(N - D >= 2M\)或者\(M = 0\)那么就是\(D^{N}\) 只和数字的奇偶性有关,如果有k个奇数,那么必须满足\(N - k >= 2M\) ...

  10. ARTS 第一周打卡

    Algorithm : 做一个 leetcode 的算法题 1.只出现一次的数字 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. 说明: 你的算 ...