相关疑难解决方法(0)

axios 如何将 blob 与 arraybuffer 作为 responseType 处理?

我正在下载带有axios的 zip 文件。为了进一步处理,我需要获取已下载的“原始”数据。据我所知,在 Javascript 中有两种类型:Blob 和 Arraybuffers。两者都可以responseType在请求选项中指定。

在下一步中,需要解压缩 zip 文件。我为此尝试了两个库:js-zip 和 adm-zip。两者都希望数据是一个 ArrayBuffer。到目前为止一切顺利,我可以将 blob 转换为缓冲区。在此转换之后,adm-zip 总是很高兴地提取 zip 文件。但是,js-zip 会抱怨文件损坏,除非 zip 已'arraybuffer'作为 axios下载responseType。js-zip 不适buffer用于从blob.

这让我很困惑。我想这两个ArrayBufferBlob本质上的底层内存只是意见。将某些内容下载为 blob 与缓冲区之间可能存在性能差异。但是结果数据应该是一样的吧?

好吧,我决定进行实验并发现:

如果指定responseType: 'blob',axios 会将 转换response.data为字符串。假设您对该字符串进行哈希处理并获得哈希码 A。然后将其转换为缓冲区。对于这种转换,您需要指定一种编码。根据编码的不同,您将获得各种新的哈希值,我们称它们为 B1、B2、B3,...当指定 'utf8' 作为编码时,我将返回原始哈希值 A。

所以我猜当下载数据为 a 时'blob',axios 隐式地将其转换为用 utf8 编码的字符串。这似乎非常合理。

现在您指定responseType: 'arraybuffer'. Axios 为您提供了一个缓冲区作为response.data. 对缓冲区进行哈希处理,您会得到一个哈希码 C。此代码与 A、B1、B2 中的任何代码都不对应,...

那么当下载数据为 时'arraybuffer',你得到完全不同的数据? …

javascript blob node.js arraybuffer axios

24
推荐指数
1
解决办法
4万
查看次数

如何下载远程图像然后将图像作为图像文件上传以提交表单?

还有类似的问题像这个这个这个这个,但没有帮助。

在 Node 中,目标是使用 axios 模块从 Twitter 下载图像,然后将此图像作为图像文件作为表单提交的一部分上传。

此代码下载 Twitter 图像,但上传的二进制图像在到达服务器(也是我们的服务器)时已损坏。

图像必须以二进制形式上传。

表单是必需的,因为其他字段也与二进制图像一起提交。删除了这些其他表单字段以简化代码示例。

        const axios = require('axios');
        const FormData = require('form-data');

        let response = await axios.get('https://pbs.twimg.com/media/EyGoZkzVoAEpgp9.png', {
                                responseType: 'arraybuffer'
                             });

        let imageBuffer = Buffer.from(response.data, 'binary');    
        let formData = new FormData();          
        formData.append('image', imageBuffer);

        try {
            let response = await axios({
                method: 'post',
                url: serverUrl,
                data: formData,
            });

            // Do stuff with response.data

        } catch (error) {
            console.log(error)
        }
Run Code Online (Sandbox Code Playgroud)

javascript form-data node.js node-modules axios

1
推荐指数
1
解决办法
198
查看次数