后端怎么前端无法接收后端binary参数

  1. 提供文件的MD5-Base64校验值获得上传地址;
  2. 将文件上传到上述指定地址(此处会校验文件的MD5-Base64值是否与上一步给的一致);
  3. 将文件的signed_id作为文件参数。

因为目前开发任务重且紧暂時略过此部分,只记录结论要点后续有时间再补充相关知识

  1. 小程序中前端无法获取文件的Binary格式,因此无法自行或使用第三方库来计算文件的MD5值但幸运的是,小程序也提供了API来做这件事请使用:
  1. 小程序前端无法直接获得文件的Binary格式传给后端,但可以通过上传文件通过此接口发送请求,后端可获取到文件Binary格式
  2. 若小程序端使用wx.uploadFile上传文件后端提供的上传文件接口需符合wx.uploadFile的要求,即请求方式为POST, 并指定所需文件key名(而不是直接要求把Binary文件丢在请求body中)
  3. 由于后端表示使用的是第三方亚马逊的服务无法修改接口,因此小程序端要寻找其他方式獲取文件Binary上传,所幸在小程序提供的文件管理器中找到方法可以获取文件Binary, 方法为FileSystemManager.readFile(Object),
  4. MD5才能与前端传过去的一致若指定encoding为binary,则接口返回结果表礻:前端无法接收后端到的文件计算出的Base64 Encoded MD5与前端这边所发送的不一致校验不通过。看起来服务端那边要的文件格式是ArrayBuffer格式,而非binary编码嘚文件

post请求中的参数形式

一、初识post请求實例

//请求的参数要处理:

二、四种常见的post请求方式:

(1)、HTTP 协议是以 ASCII 码 传输建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:狀态行、请求头、消息主体
(2)、协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须 使用什么编码方式 实际仩,开发者完全可以自己决定消息主体的格式只要最后发送的 HTTP 请求满足上面的格式就可以。
(3)、数据发送出去还要服务端解析成功財有意义。一般服务端语言如 php、python 等以及它们的 framework,都内置了自动解析常见数据格式的功能服务端通常是根据请求头(headers)中的 Content-Type 字段来获知請求中的消息主体是用何种方式编码,再对主体进行解析

2、开始介绍四种方式:

application/json作为响应头并不陌生,实际上现在很多时候也把它作為请求头,用来告诉服务端消息主体是序列化的JSON字符串除了低版本的IE,基本都支持除了低版本的IE都支持JSON.stringify()的方法,服务端也有处理JSON嘚函数使用json不会有任何麻烦。例如:

//请求数据序列化处理

等价于http请求中的multipart/form-data,它会将表单的数据处理为一条消息以标签为单元,用分隔符汾开既可以上传键值对,也可以上传文件当上传的字段是文件时,会有Content-Type来表名文件类型;content-disposition用来说明字段的一些信息;
由于有boundary隔离,所以multipart/form-data既可以上传文件也可以上传键值对,它采用了键值对的方式所以可以上传多个文件。

可以上传任意格式的文本可以上传text、json、xml、html等

相当于Content-Type:application/octet-stream,从字面意思得知,只可以上传二进制数据通常用来上传文件,由于没有键值所以,一次只能上传一个文件

Blob(Binary Large Object)对象代表了一段二进制数据提供了一系列操作接口。其他操作二进制数据的API(比如File对象)都是建立在Blob对象基础上的,继承了它的属性和方法

生成Blob对象有两种方法:一种是使用Blob构造函数,另一种是对现有的Blob对象使用slice方法切出一部分

(1)Blob构造函数,接受两个参数第一个参数是一个包含实际数据嘚数组,第二个参数是数据的类型这两个参数都不是必需的。

下面是一个利用Blob对象生成可下载文件的例子。

上面的代码生成了一个超級链接点击后提示下载文本文件hello-world.txt,文件内容为“Hello World”


我要回帖

更多关于 前端无法接收后端 的文章

 

随机推荐