获取appKey和设置回调地址
到这个页面https://www.dropbox.com/developers/apps 创建一个应用,应用的类型选择Dropbox API app,在这个页面还可以选择应用能访问的数据范围。
很重要的一点就是:应该只赋予应用最小权限,也就是只访问它自己创建的文件。
应用创建好后就可以在详细页面查看它的的App key,也就是下面要用的。
在应用的详细页面,还要设置授权后的回调地址,也就是“ OAuth redirect URIs ”的输入框,这个地址必须是合法的URL,哪怕是不存在的,也就是,可以设置成“https://127.0.0.1/oauth2/authorized”。
获取授权码
将上面得到的appKey和回调地址拼接成下面这样:
https://www.dropbox.com/1/oauth2/authorize?response_type=token&client_id=abc1234569XYZ&redirect_uri=https://127.0.0.1/oauth2/authorized
里面的client_id的值填appKey,redirect_uri填回调地址,把这个地址拷贝到浏览器打开,如果你还没有登录Dropbox,会提醒你登录,登录后大概是这样的界面:
点击“允许”授权成功后,浏览器会调整,地址栏里的地址会变,拷出来大概是这样的:
https://127.0.0.1/oauth2/authorized#access_token=O_xxkdkdkdw2yeidikcppdfdoiffjj&token_type=bearer&uid=158130000
上面的access_token: O_xxkdkdkdw2yeidikcppdfdoiffjj
就是代码要用的。
调用Go SDK
首先要把sdk clone回来: git clone https://github.com/wen866595/godropbox.git , 这条命令会把sdk拷贝到当前的godropbox目录下。
package main
import (
"./dropbox"
"fmt"
"os"
"flag"
)
var (
tokens = map[string]string{
"access_token": "you oauth2 access token",
"token_type": "bearer",
}
)
func main() {
flag.Parse()
args := flag.Args()
if len(args) < 2 {
fmt.Printf("Usage: godropbox path/to/locale/file /path/at/dropbox\n")
return
}
oauth2 := &dropbox.OAuth2{AccessToken: tokens["access_token"], TokenType: tokens["token_type"]}
dropboxApi := &dropbox.DropboxApi{Signer: oauth2, Root: "sandbox", Locale: "CN"}
localePath, remotePath := flag.Arg(0), flag.Arg(1)
_, err := dropboxApi.UploadByChunked(localePath, remotePath, 10485760, 8) // 10485760表示一次上传的块大小为1M,对于大文件,这个值设得大点可以减少上传的次数。
if err != nil {
fmt.Printf("error msg: %s\n", err)
os.Exit(1)
} else {
os.Exit(0)
}
}
把上面的代码保存在main.go文件里面,放到godropbox目录下,到godropbox目录用 go build
命令构建成一个可执行文件。在我的VPS上使用: ./godropbox path/to/locale/file /path/at/dropbox
,效果还行。
以前用Java SDK写过一个上传的功能,文件上传完了还要很久才退出。
欢迎关注我的微信公众号: coderbee笔记,可以更及时回复你的讨论。
博主,你发的源码不全啊,无法编译通过
嗯,我忘了说,用 git clone https://github.com/wen866595/godropbox.git 把SDK clone到本地。说明已加到文章里去了。
博主,还是编译不过,main.go会提示没有package,我添加了package和import还是出问题,
贴得源码不全啊
博主,按照你的方法无法编译通过,不知道你是怎么import的?
嗯,没有贴全的代码等于没贴。现在完整贴上去了,而且测试后是可以编译并上传的了。你再看下。目录结构现在是这样的:
godropbox
-dropbox
-dropbox.go
-dropbox_test.go
-oauth2.go
-main.go
-README.md
-LICENSE
注意要把这里的 “access_token”: “you oauth2 access token”, 改成你的token。
博主,你的博客代码插件,用的是哪款啊?
我按照了一款,但是编辑文章的时候没有插入代码这个选项,怎么回事?
syntaxhighter这款插件
我没用代码插件,我的博客原始内容都是markdown格式的,装了插件叫“Markdown on Save Improved”,在发布文章的它会把markdown格式的内容转换为html的。
那个备份到dropbox的搞好了没??
编译之后,复制到vps得linux系统里面去。bash提示无法执行二进制文件,这是怎么回事呢?
root@server:/home/MyWebsite# ./godropbox
-bash: ./godropbox: cannot execute binary file
你在什么系统下编译的?? 二进制文件一般是不可移植的,你应该直接在vps下编译。
还是不行,编译okay之后,
root@server:/home/MyWebsite# ./dropboxbak ./ipfilter.sh /Photos
error msg: Forbidden
不知道必须写绝对地址吗?
还是dropbox的地址怎么写?