Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/473.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript fs.writeFileSnyc/fs.writeFile写入损坏的文件_Javascript_Node.js_Asynchronous_Promise_Google Drive Api - Fatal编程技术网

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

Javascript fs.writeFileSnyc/fs.writeFile写入损坏的文件,javascript,node.js,asynchronous,promise,google-drive-api,Javascript,Node.js,Asynchronous,Promise,Google Drive Api,我正在调用Google Drive的下载API,然后我想使用fs.writeFile或fs.writeFileSync在本地编写下载的文件。以下是我正在做的: const writeFile = util.promisify(fs.writeFile) const file_from_google = await axios.get(`https://www.googleapis.com/drive/v3/files/${id}?alt=media`, {

我正在调用Google Drive的下载API,然后我想使用
fs.writeFile
fs.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
,而不是使用它。几乎每次我得到一个比原始文件大的损坏文件。有人能告诉我什么是将下载的文件正确写入目录的好方法吗?

您需要将
响应类型:'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)

您需要将
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)

不重要的旁注是,您可以使用
fs.promises.writeFile
而不必执行
util.promisify
@BenjaminGruenbaum-这是
fs.promises.writeFile
在node.js中的约定方式。我也看到了
require('fs/promissions')
以及关于如何做的讨论。@jfriend00 fs/promissions不会发生-可能在
@nodejs/fs
某个时候,fs.promissions是目前为止的情况,这是一个公平的赌注。不重要的旁注,您可以使用
fs.promises.writeFile
而不必执行
util.promisify
@BenjaminGruenbaum-这是
fs.promises.writeFile
在node.js中的约定方式。我也看到了
require('fs/promissions')
以及关于如何做的讨论。@jfriend00 fs/promissions不会发生-可能是在
@nodejs/fs
某个时候,fs.promissions是目前的情况,所以这是一个公平的赌注。