2019 Google Drive Api 上传文件到谷歌云盘 获取分享下载链接
如果图片失效或者格式已乱,建议阅读原文
在【案例】搭建 Quizzes 网站,每天赚取 30-50 美元 提到下载站项目,因为整个项目代码加上一些说明,会导致内容太多,所以准备分成几部分,这样看起来更舒服。
本文主要内容:通过 Google Drive Api 将文件上传到谷歌云盘,然后获取到文件的下载链接,用户只要点击该链接就能下载文件。
这里面坑非常多,获取下载链接时, API 版本改来改去,一些方法还不可用。特别如果代码处理不当,获取到的下载链接还不能直接被下载,需要上传者授权才能下载,这里我没注意,导致后面踩了大坑。
Google Drive API 开通及密钥凭证下载
这里直接略过,比较简单而且以前在 通过 Google API 上传视频到 Youtube 里写的非常详细,这里基本一样,只不过开通的服务不一样而已。
先获取下载链接 再授权链接权限
上传成功后获取到下载链接,但是此链接竟然要授权才能被下载。暂时没图片,这里很难描述,就直接跳过,如果碰到就会懂我意思,直接用我代码也不会碰到这个问题。
最重要的方法,传入文件地址,获取下载链接
public static String realUploadFile(String filePath){Preconditions.checkArgument(!UPLOAD_FILE_PATH.startsWith("Enter ") && !DIR_FOR_DOWNLOADS.startsWith("Enter "),"Please enter the upload file path and download directory in %s", DriveSample.class);try {httpTransport = GoogleNetHttpTransport.newTrustedTransport();dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);Credential credential = authorize();drive = new Drive.Builder(httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();View.header1("Starting Resumable Media Upload");File uploadedFile = uploadFile(false,filePath);String shareLink = uploadedFile.getWebViewLink();System.out.println(shareLink);String fileID = uploadedFile.getId();insertPermission(drive,fileID);View.header1("Success!");return shareLink;} catch (IOException e) {System.err.println(e.getMessage());} catch (Throwable t) {t.printStackTrace();}return filePath;}
接着提供里面用到的方法函数。
读取密钥文件,验证权限 ,和前面 Youtbe Api 是类似。
private static Credential authorize() throws Exception {GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,new InputStreamReader(DriveSample.class.getResourceAsStream("/client_secrets.json")));if (clientSecrets.getDetails().getClientId().startsWith("Enter")|| clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) {System.out.println("Enter Client ID and Secret from https://code.google.com/apis/console/?api=drive "+ "into drive-cmdline-sample/src/main/resources/client_secrets.json");System.exit(1);}GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport, JSON_FACTORY, clientSecrets,Collections.singleton(DriveScopes.DRIVE_FILE)).setDataStoreFactory(dataStoreFactory).build();return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");}
接着是里面上传代码
File uploadedFile = uploadFile(false,filePath);
private static File uploadFile(boolean useDirectUpload,String filePath) throws IOException {File fileMetadata = new File();fileMetadata.setWritersCanShare(true);java.io.File UPLOAD_FILE = new java.io.File(filePath);fileMetadata.setName(UPLOAD_FILE.getName());FileContent mediaContent = new FileContent("image/jpeg", UPLOAD_FILE);Drive.Files.Create insert = drive.files().create(fileMetadata, mediaContent);insert.setFields("webViewLink,id");MediaHttpUploader uploader = insert.getMediaHttpUploader();uploader.setDirectUploadEnabled(useDirectUpload);uploader.setProgressListener(new FileUploadProgressListener());return insert.execute();}
这个方法中最重要的一行是设置参数 ,这里必须要如此添加两个。因为 Google Drive API 很神奇,如果不添加请求属性,最后获取到的结果对象中不会存在该属性,也就是说拿不到对应的值。比如这里:前者是链接,这里添加后,上传成功得到的对象中才会返回分享下载链接。 后者的 id 也是类似,等下会看到。
insert.setFields("webViewLink,id");
下载链接
String shareLink = uploadedFile.getWebViewLink();
因为前面请求时设置了 link
属性,所以这里能获取到 shareLink
。
同理,也添加了 id
这里也能获取到 。需要获取到 文件id 去设置权限,设置成 所有人都能读 ,不然别人点击上面链接后会发送邮件到你邮箱,请求你授权。
当初我就搞错了,在上面获取到链接后没做下面处理,直接返回使用。结果网站有流量后,每天都能收到很多邮件,又不能取消拉黑,就只能被「烦」。
String fileID = uploadedFile.getId();
private static Permission insertPermission(Drive service, String fileId) throws Exception{Permission newPermission = new Permission();newPermission.setType("anyone");newPermission.setRole("reader");return service.permissions().create(fileId, newPermission).execute();}
经过上面授权就行,将处理后的链接当作最终结果返回。
好的,最后如果需要 xx ,在使用此功能时,别忘记下面代码。你懂的,和 通过 Google API 上传视频到 Youtube 一样。
// System.setProperty("https.protocols", "TLSv1,TLSv1.1,TLSv1.2");
// System.setProperty("proxyHost", "127.0.0.1");
// System.setProperty("proxyPort", "1080");
源码
代码上面都有。如果想看的清楚点,整个文件代码我放在服务器上,下载地址在公众号「老郭种树」后台回复 0505 获取。
向你推荐:
- 启发!这几个日流量上百万的台湾农场采集站值得一看 (3)
- 从CSDN免积分下载最佳实践到网盘赚钱案例 (3)
- 【案例】Youtube还养活了哪些人 分享点你可能不知道的秘密 (3)
- 【案例】搭建 Quizzes 网站,每天赚取 30-50 美元 (3)
2019 Google Drive Api 上传文件到谷歌云盘 获取分享下载链接相关推荐
- python 百度云api_Python使用百度API上传文件到百度网盘代码分享
# coding:UTF-8 import urllib import urllib2 __author__ = 'Administrator' from poster.encode import m ...
- php 蓝奏网盘上传文件,蓝奏云盘客户端v2.6 支持文件夹和大文件上传了
首先来份哈勃检测:https://habo.qq.com/file/showdetail?pk=ADcGZ11vB28IOVs6U2U%3D 软件MD5:5bb1f50860b2e626ccda17e ...
- 云服务器上传文件到阿里云盘
笔者服务器环境:centos7.8 注:需要下载阿里云盘cli程序,如果是服务器是Windows环境,直接网页打开阿里云盘然后上传文件即可,其他的Linux环境,命令行内用wget工具下载 命令行程序 ...
- php 下 html5 XHR2 + FormData + File API 上传文件
FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...
- restful api上传文件(基础)-springboot
restful api上传文件(基础)-springboot 基于restful api格式的文件上传(只是上传到本地): package com.nxz.controller;import com. ...
- java上传文件至阿里云oss工具类
第一步:引入oss maven坐标 <dependency><groupId>com.aliyun.oss</groupId><artifactId>a ...
- 微信小程序直接上传文件到阿里云OSS组件封装
微信小程序直接上传文件到OSS 1. 封装公共方法 在根目录utils目录新建一个upload文件夹: // utils/upload/base64.jsvar base64EncodeChars = ...
- Android(安卓)上传文件到阿里云点播,阿里云点播转码
Android(安卓)上传文件到阿里云点播,阿里云点播转码 文章目录 Android(安卓)上传文件到阿里云点播,阿里云点播转码 一:登录阿里云点播平台配置添加转码模板组 1:需要什么参数,可自行填写 ...
- linux上传文件至 百度云
pip install requests pip install bypy bypy info bypy info 后 终端显示如下: Please visit: https://openapi.ba ...
最新文章
- 以前写的canvas 小游戏 贪吃蛇代码
- APACHE 2.2.8+TOMCAT6.0.14配置负载均衡
- 论文笔记:PointSIFT
- html标题电脑快速输入,快速把纸上文字输入到电脑中的技巧
- 国内RISC-V产学研基地成立,Intel、Arm、RISC-V将三分天下?
- 使用runnable创建线程
- Oracle拆分字符串,字符串分割的函数。
- mysql8 高可用_mysql系列之8.mysql高可用 (mha4mysql)
- VulnHub的安全漏洞测试(1)
- Android Studio使用jni、so库
- 遍历树,找出所有叶子路径
- 使用 Boost 的 IPC 和 MPI 库进行并发编程
- 控制流程之while循环
- shell 练习(07)——MySQL 数据库备份
- 完美抠图王冰冰!字节实习生实现4K60帧视频实时抠图,连头发丝都根根分明!...
- android系统设置默认字体,如何获取Android设备的默认字体?
- JavaScript重定向到其他网页
- RabbitMQ之业务场景(四):动态创建,删除队列工具类,拿来即用
- CSP模测(一)A卷
- while循环语法结构