fs.writeFileSnyc / fs.writeFile写入损坏的文件

时间:2018-08-01 15:56:22

标签: javascript node.js asynchronous promise google-drive-api

我正在调用Google云端硬盘的下载API,然后我想使用fs.writeFilefs.writeFileSync在本地写入下载的文件。这是我在做什么:

    const writeFile = util.promisify(fs.writeFile)
    const file_from_google = await axios.get(`https://www.googleapis.com/drive/v3/files/${id}?alt=media`,
            {headers: 
                {'Authorization': `Bearer ${someToken}`},                        
            },)
    const fullPath = path.join(__dirname, '..', 'downloads','testFile.docx')
    writeFile(fullPath, file_from_google.data)

虽然确实在指定目录中为我创建了文件,但是无论执行writeFile还是writeFileSync,文件都已损坏。我也尝试过直接使用fs.writeFileSync而不是散布它。几乎每次我损坏的文件都大于原始文件的大小时。有人可以告诉我一种将下载的文件正确写入目录的好方法吗?

1 个答案:

答案 0 :(得分:1)

您需要将responseType: 'arraybuffer'选项添加到axios.get

const writeFile = util.promisify(fs.writeFile)
const file_from_google = await axios.get(`https://www.googleapis.com/drive/v3/files/${id}?alt=media`,
        {responseType: 'arraybuffer, headers: 
            {'Authorization': `Bearer ${someToken}`},                        
        },)
const fullPath = path.join(__dirname, '..', 'downloads','testFile.docx')
writeFile(fullPath, file_from_google.data)