GoogleDrive中上传文件,Java整合操作

news2024/9/20 20:28:40

GoogleDrive使用ServiceAccount的授权方式:(科学上网)

1.在Google Cloud中查看自己的项目:Dashboard – My First Project – Google Cloud console没有的话新建项目。默认名称:My First Project

2. 创建ServiceAccount服务账号:

3. 添加私钥,可选用json格式,方便读取,可下载下来

4. 开启Google Drive Api,直接在搜索栏里搜索即可:点击ENABLE后显示API Enabled

5. 在云端硬盘中操作:Home - Google Drive创建目录

1)其中的link是:
https://drive.google.com/drive/folders/17hvNdQUwd10cnD9Ur2JlxrybMuYBCpw0?usp=drive_link,
那么这里的17hvNdQUwd10cnD9Ur2JlxrybMuYBCpw0就是fileId,后面代码中也有体现:

2)而权限也是至关重要:点击这个文件夹的share,或者是点击右侧的Manage access:

3)其中share中我们要选择editor才可以上传文件:

至此,账号及权限问题我们都解决了。现在直接上源码:
1. maven管理依赖:

<!--    GoogleDrive相关依赖包   -->
<!-- https://mvnrepository.com/artifact/com.google.apis/google-api-services-drive -->
<dependency>
    <groupId>com.google.apis</groupId>
    <artifactId>google-api-services-drive</artifactId>
    <version>v3-rev197-1.25.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.api-client/google-api-client -->
<dependency>
    <groupId>com.google.api-client</groupId>
    <artifactId>google-api-client</artifactId>
    <version>1.34.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
<dependency>
    <groupId>com.google.auth</groupId>
    <artifactId>google-auth-library-oauth2-http</artifactId>
    <version>1.23.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.google.oauth-client/google-oauth-client-jetty -->
<dependency>
    <groupId>com.google.oauth-client</groupId>
    <artifactId>google-oauth-client-jetty</artifactId>
    <version>1.35.0</version>
</dependency>

2. 代码如下:

// 一些scope权限

private static final List<String> SCOPES = Arrays.asList(DriveScopes.DRIVE_APPDATA,DriveScopes.DRIVE,DriveScopes.DRIVE_METADATA,DriveScopes.DRIVE_READONLY,DriveScopes.DRIVE_METADATA_READONLY,DriveScopes.DRIVE_SCRIPTS);

/**
 * 校验认证权限
 * @param configJsonFile
 * @return
 * @throws IOException
 */

private static HttpRequestInitializer fromServiceAccount(InputStream configJsonFile) throws IOException {
    GoogleCredentials credentials = ServiceAccountCredentials.fromStream(configJsonFile).createScoped(SCOPES);
    return new HttpCredentialsAdapter(credentials);
}

/**
 * 根据后缀名获取文件类型
 * @param suffix
 * @return
 */
public static String findMineTypeBySuffix(String suffix) {
    for (MineTypeOnGoogleDriveEnum type : MineTypeOnGoogleDriveEnum.values()) {
        if (type.getSuffix().equalsIgnoreCase(suffix)) {
            return type.getFileType();
        }
    }
    return "Unknown mine type";
}

/**
 * GoogleDrive的后缀名===mineType,枚举类
 */

@Getter
@AllArgsConstructor
public enum MineTypeOnGoogleDriveEnum {
    TXT("txt", "text/plain"),
    JPG("jpg", "image/jpeg"),
    JPEG("jpeg", "image/jpeg"),
    PNG("png", "image/png"),
    PDF("pdf", "application/pdf"),
    DOC("doc", "application/msword"),
    DOCX("docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"),
    XLS("xls", "application/vnd.ms-excel"),
    XLSX("xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"),
    PPT("ppt", "application/vnd.ms-powerpoint"),
    PPTX("pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"),
    ZIP("zip", "application/zip");
    
    private final String suffix;
    private final String fileType;
}

Psvm:

public static void main(String[] args) {
    try {
        // 0.构建http传输
        NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();

        // 1.根据json配置文件,构建输入流
        InputStream configFileStream = GoogleDriveServiceImpl.class.getResourceAsStream("/google-drive-config.json");

        // 2.创建Drive实例
        Drive drive = new Drive.Builder(httpTransport, new GsonFactory(), fromServiceAccount(configFileStream))
                .setApplicationName("Application-Name")
                .build();

        // 3.指定上传文件的路径
        java.io.File filePath = new java.io.File("/22.txt");
        String suffix = FileUtil.getSuffix(filePath);

        // 4.构建文件元数据:文件名,父目录,文件的mineType
        File fileMetadata = new File();
        fileMetadata.setName("add."+ suffix);
        fileMetadata.setParents(Collections.singletonList("17hvNdQUwd10cnD9Ur2JlxrybMuYBCpw0"));
        String mineType = findMineTypeBySuffix(suffix);
        FileContent mediaContent = new FileContent(mineType, filePath);

        // 5.上传文件
        File uploadedFile = drive.files().create(fileMetadata, mediaContent)
                .setFields("id,name")
                .execute();

        System.out.println("FileId: " + uploadedFile.getId());
        System.out.println("FileName: " + uploadedFile.getName());
    } catch (IOException | GeneralSecurityException e) {
        throw new RuntimeException(e);
    }
}

最后,FileId就是文件id,那么文件的链接就是https://drive.google.com/file/d/s%/view中的s%替换即可。

3. 测试:

尤为重要的是看是否可以ping通:googleapis.com。如果可以那么就能上传成功。若不可以也能上传成功,可以私信我,欢迎交流一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2135935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于 WeChatFerry 的 Python 机器人框架WeChatRobot

WeChatRobot 一个基于 WeChatFerry 的 Python 机器人框架。 微信机器人&#xff0c;接入Gemini、ChatGPT、ChatGLM、讯飞星火、Tigerbot&#xff1b;成语接龙、天气预报、新闻摘要、定时任务 克隆项目&#xff1a; git clone https://github.com/lich0821/WeChatRobot.git …

计算机毕业设计 沉浸式戏曲文化体验系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

百年病态集论的症结:3000年不识伪≌直线段

黄小宁 公元前1100年中国人商高同周公的一段对话谈到了勾股定理说明人类认识几何学的直线段起码已有3000多年。 直角三角形⊿的斜边c&#xff5e;水平直角边a&#xff0c;即c经旋转和均匀压缩变换可变为a&#xff5e;c。3000年不识伪≌直线段使数学认定a经刚体运动变为附着在c…

rk3399 的 HDMI 热插拔的问题

问题&#xff1a; 客户的3399 的板子上&#xff0c;烧写ubuntu 发现&#xff0c; 没有热插拔。 测试情况&#xff1a; 系统在第一次烧写完成之后&#xff0c;是有热插拔的&#xff0c;但是第二次启动就没有了。 还有一个情况&#xff0c;就是 &#xff0c;如果我一开始 上电的…

[论文精读]Polarized message-passing in graph neural networks

论文网址&#xff1a;Polarized message-passing in graph neural networks - ScienceDirect 论文代码&#xff1a;he-tiantian/PMP-GNNs&#xff1a;极化消息传递图神经网络的 Pytorch 实现&#xff0c;发表在 Artificial Intelligence&#xff0c;2024 年。 (github.com) 英…

红日靶场通关

初始准备 首先是网络配置&#xff0c;看教程来的&#xff0c;我配置完的效果如下 windows7&#xff1a;(内&#xff1a;192.168.52.143 / 外&#xff1a;192.168.154.136) windows2003&#xff1a;(内&#xff1a;192.168.52.141)windows2008:&#xff08;内&#xff1a;192.…

运算放大器选型的关键参数

上图中的顺序是从左上到右下进行选型&#xff0c;小信号看带宽&#xff0c;大信号看压摆率。一般选用电压反馈型的运放&#xff0c;但是涉及到高频特性的时候也会选择电流反馈型的运放。精密运放选用失调电压比较小的运放&#xff0c;一般失调电压在1mv左右。低功耗的情况下需要…

极越造车2.0:01销量回暖,07杀出血路,ASD抢跑FSD

‍‍‍作者 |张马也 编辑 |德新 9月13日&#xff0c;极越公布其第二款车型极越07上市48小时内&#xff0c;订单超过5000台。 对这家造车4年多的车企来说&#xff0c;这意味着新车取得了初步的成功。 懂车帝的数据显示&#xff0c;7月极越01销量1143台&#xff0c;8月销量则翻…

Linux 入门:简单的基础操作

“批判他人总是想的太简单 剖析自己总是想的太困难” 文章目录 前言Linux 入门&#xff1a;从基础操作到 WSL2 安装文章有误敬请斧正 不胜感恩&#xff01;1. 什么是 Linux&#xff1f;2. Linux 和其他系统有啥不同&#xff1f;3. Linux 的主要组成4. 常见 Linux 发行版5. 基本…

openstack之cinder介绍

概念 cinder 为虚拟机提供管理块存储服务。支持的文件系统&#xff1a;lvm、iscsi、nfs、san、RBD 组件构成及功能介绍 cinder api&#xff1a;在控制节点运行&#xff0c;管理服务的接口&#xff0c;被命令行、其他组件调用&#xff1b; cinder scheduler&#xff1a;类似n…

大数据新视界 --大数据大厂之Kafka消息队列实战:实现高吞吐量数据传输

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

美国税收制度及SAP实施

1. 税制综述 美国是以直接税为主的国家,实行联邦、州和地方&#xff08;市、县&#xff09;三级征税制度&#xff0c;属于彻底的分税制国家。美国联邦税以个人所得税和企业所得税为其主要收入来源&#xff0c;州税以销售与使用税为其主要收入来源&#xff0c;地方税以财产税为…

UART 16550的使用

前言 本文从操作系统使用 16550 的角度来学习 16550。主要解析通用的串口寄存器的作用。 16550 串口由一系列寄存器控制串口行为。不同的具体设备寄存器的偏移不同&#xff0c;寄存器的长度可能不同。 例如&#xff0c;在 AXI UART 16550中&#xff0c;各寄存器长度都为 32 b…

overleaf如何下载论文的pdf

用overleaf写完英文论文后&#xff0c;要将论文保存为PDF格式 点击图片中的下载按钮 然后选择一个路径保存论文的PDF格式即可。

测试通用面试题大全

24年软件测试的发展如何&#xff1f; 1、IT行业还会继续升温&#xff0c;高质量人才需求相对还是短缺。 2、要求变高之后&#xff0c;很难再下降了&#xff0c;学历和经验。 3、功能测试之外的东西&#xff0c;接口、性能和自动化要掌握一点。 4、长远来看&#xff0c;软件…

Android Framework(五)WMS-窗口显示流程——窗口布局与计算

文章目录 relayoutWindow流程概览应用端处理——ViewRootImpl::setView -> relayoutWindowViewRootImpl::setViewViewRootImpl::performTraversalsViewRootImpl::relayoutWindow Surface的创建WindowManagerService::relayoutWindow了解容器类型和Buff类型的SurfaceBuff类型…

并发编程 - GCD的栅栏(dispatch_barrier_async)

引言 Grand Central Dispath&#xff08;GCD&#xff09;是苹果提供的强大工具&#xff0c;它几乎涵盖了多线程编程的所有方面。通过GCD&#xff0c;我们可以轻松地创建队列、管理线程&#xff0c;并以更优雅的方式处理并发任务。在前面的博客中&#xff0c;我们已经深入探讨了…

基于SpringBoot+Vue+MySQL的校园健康驿站管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 本文设计并实现了一个基于SpringBoot后端、Vue前端与MySQL数据库的校园健康驿站管理系统。该系统旨在通过数字化手段&#xff0c;全面管理学生的健康信息&#xff0c;包括体温监测、疫苗接种记录、健康状况申报等&#xff0c;为…

【Canvas与表盘】绘制黄蓝两色简约表盘

【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>黄蓝卡通手表</title><style type"text/css">…

【我的Android进阶之旅】解决CardView四个圆角有白边的问题

文章目录 一、问题描述二、分析CardView出现白边的原因三、如何解决这个问题?3.1 如何修复?3.2 为什么这样可以修复?3.3 示例代码3.4 总结一、问题描述 在实现一个RecycleView的Item时候,样式需要用到卡片式效果,于是想到用CardView来实现,但是最终发现运行出来的效果,…