有没有能把 onedrive 当成 cos 用的代码

2021-01-23 08:06:19 +08:00
 artms

最近在做个项目,想尝试下 用 web 客户端把用户 post 的视频文件直接存到 youtube 或者 onedrive.

youtube 的 api 好像不行了,现在只有 onedrive.. 但是 onedrive 怎么才能像腾讯云 cos 那样保存上去呢?

求教各路大神 给点思路~

3471 次点击
所在节点    程序员
16 条回复
favourstreet
2021-01-23 08:16:27 +08:00
onedrive 有一套 oauth 认证的 graph api,可以以分片的方式上传,api 和一般对象存储的分片上传有点不一样,但基本用法是一样的
skys215
2021-01-23 08:32:08 +08:00
“像腾讯云 cos 那样” 是指怎么样?
mm2x
2021-01-23 08:35:37 +08:00
onderive 不是有 API 的吗?可以申请啊。
zqcolor
2021-01-23 08:36:17 +08:00
'onedrive 有一套 oauth 认证的 graph api' 几年前用过,当时这个挺难用,分片部分好像我们自己实现的,不知道现在号线没有, 但是好像 app 还要注册一下,然后每次要登录一下才能用
artms
2021-01-23 08:39:30 +08:00
@zqcolor 这么看起来还挺麻烦的。
Ranying
2021-01-23 08:43:42 +08:00
不如传到后端,然后方法就多了起来
MaiKuraki
2021-01-23 08:53:49 +08:00
artms
2021-01-23 09:07:17 +08:00
@MaiKuraki 这个是第二步。现在第一步要做的是解决上传。。。
Shazoo
2021-01-23 09:28:06 +08:00
用 Graphic API 。

``` python
def get_upload_session_url(path, filename):
url = f"https://graph.microsoft.com/v1.0/me/drive/root:/{config['root_path']}/{path}/{filename}:/createUploadSession"
payload = {
"item" : {
"@microsoft.graph.conflictBehavior": "replace",
"name": filename
}
}
resp = r.post(url, headers=add_token_header({'Content-Type': 'application/json'}), data=json.dumps(payload))
return json.loads(resp.content)['uploadUrl']

def upload_file_body(upload_url, localfile):
f = open(localfile, 'rb')
data = f.read()
headers = {
'Content-Length':f'{len(data)}',
'Content-Range': f'bytes 0-{len(data)-1}/{len(data)}'
}
resp = r.put(upload_url, data=data, headers=headers)
f.close()
return json.loads(resp.content)['id']
```

上传的核心代码。是适合大文件的那种。
Shazoo
2021-01-23 09:31:37 +08:00
@artms 最近刚做了个 OneDrive 当 Typora 图床的小工具。上面的是其中代码,C 程序员写 python,凑合看吧。

Graphic API 麻烦的是认证授权部分。建议用 code 方案,最简单。

直连方案,可能需要服务器配合(因为直连链接是几次 302 和 url 替换,其中有部分不可描述了,我是用香港服务器搞定的)

1drv.ws 这个服务很不错,可是貌似有缓存,我这里出现几次跳转链接不更新了。所以还是自建比较好。
stille
2021-01-23 11:07:52 +08:00
用 rclone 上传吧
Winter1sComing
2021-01-23 11:56:06 +08:00
IDAEngine
2021-01-23 13:04:19 +08:00
rclone
artms
2021-01-23 18:29:38 +08:00
@Shazoo 多谢,这正是我要干的~ 有心了!
artms
2021-01-23 18:30:37 +08:00
baobao1270
2021-01-25 14:55:05 +08:00
oneindex?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/747583

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX