zoukankan      html  css  js  c++  java
  • WebKitFormBoundary的解决办法

    put方式更适用于传输二进制数据流。

    需要将二进制文件流使用put方式发送给后台,起初使用formData方式,但是formData方式会导致上传后的文件附带一些不期望的数据:

    ------WebKitFormBoundaryr8nE5YswiCilf8qB
    Content-Disposition: form-data; name="file"; filename="blob"
    Content-Type: application/octet-stream
    
    hello world
    ------WebKitFormBoundaryr8nE5YswiCilf8qB--
    
    

    上面这个例子里, txt文件里的内容是hello,world,但在上传后却生成了开头一堆,末尾一堆,并且并不是仅txt文件存在这种问题,亲测图片格式上传后再下载也会如此,
    今天笔者查找了好多资料,但是并没有解决问题,万般无奈只好一点点摸索,现在讲下思路:

    笔者的思路起初很简单,使用formData方式,然后使用formData.append()将二进制文件流放入这个formData对象中,然后在axios请求中的data中将formData填充进去:

            let formData = new FormData();
            formData.append("file",  blobs); //二进制文件流
            axios({
              method: "put",
              url: uploadUrl,
              data: formData,
              headers: {
                "Content-Type": "multipart/form-data", // 关键
              },
            })
    

    但是这样写就会导致出现上述情况--上传后无法下载,然后笔者做了一些改进:

    //大概思路:放弃formData方式传输二进制文件流
    axios({
              method: "put",
              url: uploadUrl,
              data:  blobs , // 重点1,直接将原始二进制流赋给data
              headers: {
                "Content-Type": "application/octet-stream", // 重点2
              },
              responseType: "blob", //重点3
    })
    

    本质是弃用formData传输文件流,而是使用二进制特有文件流格式(content-type),这样即可解决签名文件内WebKitFormBoundaryr8nE5YswiCilf8qB等等等等讨厌的问题

    以上。

    作者:致爱丽丝
    本文版权归作者和博客园共有,欢迎转载,但必须在文章页面给出原文链接并标名原文作者,否则保留追究法律责任的权利。
  • 相关阅读:
    ADSL PPPoE出错详解及宽带连接中的一些错误代码含义
    2007年世界顶级防火墙排名(附下载地址)
    Asp.net Mvc问题索引
    .NET 操作GPRS Model的类库 ATSMS
    .NET 3.5多个工程编译的DOS命令
    Google Chrome浏览器JS执行效率惊人 实测比IE快十几倍
    FTP文件同步工具(FTP_File_Synchronizer) 源代码
    [转载] ORACLE中SQL查询优化研究
    ext的grid导出为excel 方法
    数据库分页SQL语句
  • 原文地址:https://www.cnblogs.com/hjk1124/p/15177240.html
Copyright © 2011-2022 走看看