【发布时间】:2020-03-05 21:01:15
【问题描述】:
我设法使用此代码将文本文件上传到谷歌 API
google.drive({
version: 'v3',
auth
})
var media = {
mimeType: 'text/plain',
body: 'text'
}
drive.files.create({
media: media,
fields: 'id'
})
但是,如果我尝试按照文档中的建议上传图像,我会在驱动器上获得空文件。 尝试这样做(文件存在并拥有所有权限)
const drive = google.drive({
version: 'v3',
auth
})
var media = {
mimeType: 'image/png',
body: fs.createReadStream(path.resolve(__dirname, '../assets/logo.png'))
}
drive.files.create({
media: media,
fields: 'id'
})
请帮忙。
下面是正在上传的整个组件
<template>
<div>
<button class="btn btn-block btn-success mb-3" @click="connect">Syncronize</button>
<h3 class="text-center">
<template v-if="getToken">Sync success</template>
<template v-else>Sync failed</template>
</h3>
<button @click="tryUpload">Test API</button>
</div>
</template>
<script>
import OAuth2 from '../classes/OAuth2'
import { mapActions, mapGetters } from 'vuex'
const {google} = require('googleapis')
export default {
computed: {
...mapGetters([
'getToken'
])
},
methods: {
...mapActions([
'saveToken'
]),
connect () {
(async () => {
let token = await new OAuth2().getToken()
this.saveToken(token)
})()
},
tryUpload () {
const auth = new google.auth.OAuth2(
'....',
'.....',
'http://127.0.0.1:42813/callback'
)
auth.setCredentials(this.getToken)
const drive = google.drive({
version: 'v3',
auth
})
let stream = fs.createReadStream(path.resolve(__dirname, '../assets/logo.png'))
var media = {
mimeType: 'image/png',
body: stream
}
drive.files.create({
media: media,
fields: 'id'
}, function (err, file) {
if (err) {
console.error(err)
} else {
console.log('File Id: ', file.id)
}
})
}
}
}
</script>
【问题讨论】:
-
我认为您问题中的以下脚本可以正确上传文件名为
Untitled的图像文件。那么你能告诉我们你上传的21 bytes文件的内容吗?还有,你能提供整个剧本吗?当然,请删除您的个人信息。 -
21 字节是 payload "imgs/logo--assets.png" 的字符串。那是该文件的确切内容。整个脚本本身是安装在 electron.js 中并与 webpack 4 捆绑在一起的 Vue.js 应用程序。上传功能在“like”浏览器 chromium 中执行。并且还提供了这个组件
-
感谢您的回复和补充信息。从您的脚本中,我认为上传图像文件的脚本有效。但在这种情况下,未设置文件元数据。例如,如何设置文件元数据?但我不确定这是否是您问题的直接解决方案。因此,如果这没有解决您的问题,我深表歉意。
-
是的,我也已经尝试过使用元数据。设置元数据会更改 api 方法调用,但此调用也会发送错误数据。感谢您的努力
-
感谢您的回复。很抱歉我的评论没有解决您的问题。作为测试运行,当Node.js在终端上只运行上传图片文件的脚本时,你会得到什么结果?如果文件可以正确上传,则可以认为问题的原因出现在除了上传文件的脚本之外的其他部分。这个怎么样?