0

我正在尝试使用HubSpot 文档中提供的节点示例上传文件。

我正在接收415(Unsupported media type). 响应说我正在发送标头application/json,即使我正在设置multipart/form-data.

const uploadFile = async () => {    

    const postUrl = `https://api.hubapi.com/filemanager/api/v3/files/upload?hapikey=${HAPI_KEY}`;

    const filename = `${APP_ROOT}/src/Files/Deal/4iG_-_CSM_Additional_Capacity/test.txt`;

    const headers = {
        'Content-Type': 'multipart/form-data'
    }

    var fileOptions = {
        access: 'PUBLIC_INDEXABLE',
        overwrite: false,
        duplicateValidationStrategy: 'NONE',
        duplicateValidationScope: 'ENTIRE_PORTAL'
    };

    var formData = {
        file: fs.createReadStream(filename),
        options: JSON.stringify(fileOptions),
        folderPath: '/Root'
    };

    try {
        const resp = await axios.post(postUrl, formData, headers); // API request

        console.log(resp.data)
    } catch (error) {
        console.log("Error: ", error);
    }
}

你能看到问题是什么或推荐一种更好的上传文件的方法吗?

谢谢!

4

2 回答 2

3

您链接到的 Node 示例使用(已弃用)request模块,而不是 Axios。

要使用 Axios ( source ),您可以将其重写为:

const FormData = require('form-data');
 
const form = new FormData();
form.append('file', fs.createReadStream(filename));
form.append('options', JSON.stringify(fileOptions));
form.append('folderPath', '/Root');

const config = { headers: form.getHeaders() };

axios.post(postUrl, form, config);
于 2022-02-14T14:06:47.267 回答
0

我们可以在 Postman 中运行 API 并检查 NodeJs - Postman Code Snippet 中的 Axios 详细信息,我认为这是更好的方法。

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

const uploadFile = async () => {
    try {
        let data = new FormData();
        data.append('folderPath', '/Root');
        form.append('file', fs.createReadStream(`${APP_ROOT}/src/Files/Deal/4iG_-_CSM_Additional_Capacity/test.txt`));
        data.append('options', JSON.stringify({
            access: 'PUBLIC_INDEXABLE',
            overwrite: false,
            duplicateValidationStrategy: 'NONE',
            duplicateValidationScope: 'ENTIRE_PORTAL'
        }));
        
        var config = {
            method: 'post',
            url: `https://api.hubapi.com/filemanager/api/v3/files/upload?hapikey=${HAPI_KEY}`,
            headers: {
                'Content-Type': 'multipart/form-data'
            },
            data: data
        };
        
        const resp = await axios(config); // API request
        console.log(resp.data)
    } catch (error) {
        // error
    }
}
于 2022-02-14T14:24:17.333 回答