如果图片失效或者格式已乱,建议阅读原文  


在【案例】搭建 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 上传文件到谷歌云盘 获取分享下载链接相关推荐

  1. python 百度云api_Python使用百度API上传文件到百度网盘代码分享

    # coding:UTF-8 import urllib import urllib2 __author__ = 'Administrator' from poster.encode import m ...

  2. php 蓝奏网盘上传文件,蓝奏云盘客户端v2.6 支持文件夹和大文件上传了

    首先来份哈勃检测:https://habo.qq.com/file/showdetail?pk=ADcGZ11vB28IOVs6U2U%3D 软件MD5:5bb1f50860b2e626ccda17e ...

  3. 云服务器上传文件到阿里云盘

    笔者服务器环境:centos7.8 注:需要下载阿里云盘cli程序,如果是服务器是Windows环境,直接网页打开阿里云盘然后上传文件即可,其他的Linux环境,命令行内用wget工具下载 命令行程序 ...

  4. php 下 html5 XHR2 + FormData + File API 上传文件

    FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...

  5. restful api上传文件(基础)-springboot

    restful api上传文件(基础)-springboot 基于restful api格式的文件上传(只是上传到本地): package com.nxz.controller;import com. ...

  6. java上传文件至阿里云oss工具类

    第一步:引入oss maven坐标 <dependency><groupId>com.aliyun.oss</groupId><artifactId>a ...

  7. 微信小程序直接上传文件到阿里云OSS组件封装

    微信小程序直接上传文件到OSS 1. 封装公共方法 在根目录utils目录新建一个upload文件夹: // utils/upload/base64.jsvar base64EncodeChars = ...

  8. Android(安卓)上传文件到阿里云点播,阿里云点播转码

    Android(安卓)上传文件到阿里云点播,阿里云点播转码 文章目录 Android(安卓)上传文件到阿里云点播,阿里云点播转码 一:登录阿里云点播平台配置添加转码模板组 1:需要什么参数,可自行填写 ...

  9. linux上传文件至 百度云

    pip install requests pip install bypy bypy info bypy info 后 终端显示如下: Please visit: https://openapi.ba ...

最新文章

  1. 以前写的canvas 小游戏 贪吃蛇代码
  2. APACHE 2.2.8+TOMCAT6.0.14配置负载均衡
  3. 论文笔记:PointSIFT
  4. html标题电脑快速输入,快速把纸上文字输入到电脑中的技巧
  5. 国内RISC-V产学研基地成立,Intel、Arm、RISC-V将三分天下?
  6. 使用runnable创建线程
  7. Oracle拆分字符串,字符串分割的函数。
  8. mysql8 高可用_mysql系列之8.mysql高可用 (mha4mysql)
  9. VulnHub的安全漏洞测试(1)
  10. Android Studio使用jni、so库
  11. 遍历树,找出所有叶子路径
  12. 使用 Boost 的 IPC 和 MPI 库进行并发编程
  13. 控制流程之while循环
  14. shell 练习(07)——MySQL 数据库备份
  15. 完美抠图王冰冰!字节实习生实现4K60帧视频实时抠图,连头发丝都根根分明!...
  16. android系统设置默认字体,如何获取Android设备的默认字体?
  17. JavaScript重定向到其他网页
  18. RabbitMQ之业务场景(四):动态创建,删除队列工具类,拿来即用
  19. CSP模测(一)A卷
  20. while循环语法结构

热门文章

  1. 云化数据中心发展历程回顾及金融与运营商对云化数据中心技术的要求
  2. 2020 CCPC 秦皇岛 H.Holy Sequence
  3. MySQL之根据经纬度查询多少公里范围内的数据
  4. 聊聊设计师的人生规划
  5. 学习HTML和CSS的扩展部分
  6. 微信小程序中的vuex(MobX)
  7. 带你学会linux下一些软件
  8. 关于C语言课设学生管理系统的编写(简单版)
  9. Prtri Purho的经典游戏搞死战争的复刻
  10. 生物计算机科学家,科学家用生物“计算机”能识别并摧毁癌细胞