通过Axios POST上传时,压缩包损坏。

我正在通过REST端点将一个zip文件 “发布 “到一个服务器应用程序。如果我通过Postman或应用程序的前台POST,我得到一个有效的发布的压缩文件。我可以转身下载它,并打开它,等等。

如果我试图用我的代码和Axios做同样的事情,服务器应用程序试图解压和使用我上传的内容失败。如果我DL存档,它是损坏的。事实上,同样的存档通过Postman &应用程序的UE工作,告诉我这要么是一个PEBKAC或潜在的Axios本身的问题。以下是我用来POST到端点的代码。请注意,在最后,我实际上是将我POST的数据以zip的形式写到我机器上的本地文件中,这样我就可以在通过fs读取文件时验证我没有做任何愚蠢的事情。我创建的文件的本地副本很好用。

请注意,我实际上是在硬编码内容长度,以及。我正在用单个文件进行测试,我已经通过fs.statSync验证了长度是正确的,并且它与我通过Postman &amp上传时看到的Content-Length一致;App的UE。

var uploadFile = (data, fileInfo) => new Promise(resolveUpload => {

    console.log("Starting Upload API call for:", fileInfo.description);

    axios.post(aepServer + '/api/v1/files',
            data, {
                jar: cookieJar,
                withCredentials: true,
                headers: {
                    'Content-Type': 'application/octet-stream',
                    'path': fileInfo.path,
                    'description': fileInfo.description,
                    'Content-Length': 354198,
                    'Accept-Encoding': 'gzip, deflate, br',
                    'Accept': '*/*',
                    'Connection': 'keep-alive'

                },
                // DANGER: allow self-signed certs workaround which I must remove 
                httpsAgent: new https.Agent({
                    rejectUnauthorized: false,
                })
            }).then((response) => {
            fileResponse = response.data;
            console.log('\n', chalk.bgMagenta('FILE UPLOADED: '), response);
            fs.writeFileSync('c:\\data\\newfile.zip', data, 'binary');
            resolveUpload(fileResponse);
        })
        .catch((err) => {
            console.log("AXIOS ERROR: ", err);
        })
});

这里有什么问题吗?在查看响应对象时,我确实看到了一些让我头疼的东西。

headers: {
  Accept: '*/*',
  'Content-Type': 'application/octet-stream',
  path: '/Workspaces/Public%20Apps/UFOs.yxzp',
  description: 'UFO Sitings in the US, 1995 to present',
  'Content-Length': 532362,
  'Accept-Encoding': 'gzip, deflate, br',
  Connection: 'keep-alive',
  Cookie: 'ayxSession=s%3Ac39f55a3-b219-43a5-9f8a-785e1222c81c.QR4KI8uXaQlL9axqkO8AkyabPVt3i37nGbz%2FJef0eqU',
  'User-Agent': 'axios/0.19.2'
},

看看内容长度: 532362字节。似乎我在头文件中硬编码的~354k值被忽略了。这可能是我的问题吗?另外,如果我用同样的代码上传csv或txt文件,一切正常–这似乎只与压缩文件有关。

EDIT:Welp,看来Axios确实覆盖了这个属性,我也没办法。Axios手动设置了Content-Length,而nodeJS. 现在的问题是,如果设置不正确,会不会把文件弄成乱码,以及为什么这个值是错误的。当我做data.length时,我得到了354198的值。

解决方案:

你可以尝试用 'multipart/form-data'

axios.post('upload_file', formData, {
  headers: {
    'Content-Type': 'multipart/form-data'
  }
})

或者使用postman获取CURL请求,并使用postman提供的头信息。

给TA打赏
共{{data.count}}人
人已打赏
未分类

无法让帮助函数在AWS的lambda nodejs中工作。

2022-9-13 15:35:17

未分类

实现一个类数组,并重塑常见的列表方法,如append。

2022-9-13 15:35:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索