我正在尝试在某些 Google 云端硬盘文件夹中发送音频 blob。为了成功,我在发送文件之前翻译文件中的 blob。 我从一开始就收到错误:
Error: File not found. code: 404, errors: [ { domain: 'global', reason: 'notFound', message: 'File not found: 1aazd544z3FOCAsdOA5E7XcOaS3297sU.', locationType: 'parameter', location: 'fileId' } ] }
渐进式编辑:到目前为止,我已将音频 blob 转换为 base64 字符串,以便简化 blob 的处理。
但是,我总是无法用我的 Base 64 音频 blob 编写文件:
这是我的driveApi.js:
// request data from req.body
var data = req.body.data ; // data variable is presented in form of base64 string
var name = req.body.word ;
(...)
// WRITE FILE AND STORE IT IN BODY HEADER PROPERTY
body: fs.writeFile((name + ".mp3"), data.substr(data.indexOf(',')+1), {encoding: 'base64'}, function(err) {
console.log('File created')
})
最佳答案
三个步骤:使用drive.files.create函数中的base64数据创建一个临时文件,然后为该文件指定一个特定名称 - 例如tempFile,您也可以使用时间值自定义此名称。之后,将此文件传递给“fs.createReadStream”方法以将其上传到 Google 云端硬盘。
一些提示:
首先 - 使用 path.join(__dirname, name + "-"+ Date.now() +".ext") 创建文件名
其次 - 使此过程异步以避免数据流冲突(尝试在创建文件之前创建文件),因此在设置后调用drive.files.create fs.writeFile 函数。
第三 - 操作完成后销毁 tempFile。它允许您自动化该过程。
我让您深入了解您需要的方法。但基本上 fs 应该可以完成这项工作。
再次强调,要注意数据流并使用回调来控制它。您的代码可能会因为函数以非操作方式启动而崩溃。 一些链接:
https://nodejs.org/api/path.html https://nodejs.org/api/fs.html#fs_fs_writefile_file_data_options_callback
这里是一个实例:
// datavalue = some time value
fs.writeFile(
path.join(__dirname, name + "-" + datevalues +".mp3" ),
data.substr(data.indexOf(',')+1),
{encoding: 'base64'},
// callback
function(err) {
if(err){ console.log("error writting file : " + err)}
console.log('File created')
console.log("WRITTING") // control data flow
fileCreate(name)
})
function fileCreate (name){
// upload file in specific folder
var folderId = "someID";
var fileMetadata = {
'name': name + ".mp3" ,
parents: [folderId]
}; console.log("MEDIA") // control data flow
var media = {
mimeType: 'audio/mp3',
body: fs.createReadStream(path.join(__dirname, name + "-" + datevalues +".mp3" ))
};
drive.files.create({
auth: jwToken,
resource: fileMetadata,
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
// Handle error
console.error(err);
} else {
console.log('File Id: ', file.data.id);
}
// make a callback to a deleteFile() function // I let you search for it
});
}
关于javascript - Google Drive API - 上传音频 blob 以 base64 字符串进行转换 -drive.files.create 方法 - 找不到文件 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50729797/