avtomon/drive-api

此包的最新版本(v0.1)没有可用的许可证信息。

jQuery包装器,用于在没有认证的情况下使用Google Drive API

安装: 13

依赖项: 0

建议者: 0

安全性: 0

星标: 1

关注者: 2

分支: 1

公开问题: 0

语言:JavaScript

类型:项目

v0.1 2017-10-30 18:48 UTC

This package is auto-updated.

Last update: 2024-09-22 21:44:04 UTC


README

描述

DriveAPI – 一个用于将Google Drive实现为Web资源的文件存储主要产品。在操作中,DriveAPI使用PHP库,该库实现了Google API以获取用于执行存储请求的令牌。有关将库集成到您的项目和对其要求的信息,请参阅Google的官方文档。但出于谨慎,我仍然上传了相应的php文件,以防万一有人遇到困难。

因此,为了模块的正确工作,您需要生成开发控制台中的PKCS#12标准文件(可以在创建服务帐户时生成),文件名类似于your-account-c5e5588daee0.p12。该文件旨在在您的服务器和Google Drive之间建立认证连接。实际上,机制是这样的:您的服务器在客户端请求下,使用带有P12密钥的PHP Google API执行请求到Google,类似于:“请允许我向您的存储写入数据,这是我(P12密钥)的证明”如果Google确认您是Google Drive虚拟磁盘的所有者,则它回答:“好的,兄弟,可以。这是你的密码。发送所有文件,它们将顺利通过”。实际上,事情要复杂一些,但如果我们忽略技术细节,那么一切看起来大约是这样的。然后服务器将获得的令牌发送给客户端 - JS库的部分,这部分负责直接发送文件。

模块的一个主要特点是在将其连接到网站时,可以在不通过Google帐户进行认证的情况下将文件上传到Google存储。网站承担了为上传文件的用户提供认证的责任(如果需要),并充当Google Drive用户和允许以自己的名义上传文件的中介。在这种情况下,文件以任何方式都不会发送到托管网站的服务器 - 上传直接发送到Google服务器。

与日常通过Web将文件上传到Google Drive相关的一个问题是上传大文件到存储的问题。问题在于,Google只接受编码为Base64的数据作为文件(或文件的一部分)。通过JavaScript将文件上传到Google Drive的示例代码包括必要的转换,为此需要首先将整个文件从磁盘读取到浏览器的内存中,然后再将其转换为Base64。问题是,对于大文件(例如IE为40+ MB),浏览器会因为内存溢出而崩溃。然而,据发现,没有阻止以块的方式读取文件到内存中,然后转换这些块并依次发送到服务器的限制。这样,在浏览器内存中一次只处理一个文件块。结合Google Drive REST API的简单重传机制,可以得到一个相当方便的上传大文件机制,并且如果需要,还可以提供上传进度的指示。

算法如下:从所需文件中读取CHUNK_SIZE字节数据,将其转换并发送到Google(同步模式)。这里有一个小缺点:我们无法以多线程的方式异步发送文件块,Google抱怨说块到达的顺序不正确。然后重复这些操作,直到文件全部加载完毕。

文件

服务器部分

config.php – 模块服务器部分的配置文件。

指令

AUTOLOAD_PATH – Google API 库中 autoload.php 文件的路径,负责加载其所需组件;

SERVICE_ACCOUNT_NAME – Google API 用户帐户的名称(可以在开发者控制台中查看)。

KEY_FILE_LOCATION – PKCS#12 密钥文件的路径。

getToken.php – 包含请求 Google 令牌的代码的文件。在最简单的情况下,客户端只需要在服务器上请求此文件,并在响应体中以文本形式接收令牌。


### 客户端部分
config.js – 客户端模块的配置,表示为对象。

指令

FOLDERS – 存储中文件的分区。预计存储中可以创建用于存储不同类型文件的目录。随后,可以通过在该属性中指定的标识符选择特定目录以加载特定文件。如果没有指定父目录,也可以将文件写入磁盘根目录。

DRIVE_FILE_INFO – 字符串,指定在向服务器发送请求时需要获取哪些文件属性(文件)作为响应。

BOUNDARY – 在文件多部分上传中使用。它是一个字符串分隔符,用于将请求体分割成多个部分,以便在发送时包含额外的参数和标题。

CHUNK_SIZE – 如上所述,该参数指示在可恢复文件上传时,需要迭代读取和发送到服务器的字节数。如果文件大小小于此参数,则使用多部分上传。

SERVER_URL – 返回 Google 令牌的 php 文件的路径。


##### drive\_api.js
方法

DriveAPI – 类的构造函数。

function DriveAPI (label, folders, cfg)

参数

label – 那个打算写入的目录的标识符。默认情况下,一个 DriveAPI 对象将写入在创建对象时指定的目录。

folders = 实际上,那个打算写入的目录列表,表示为关联数组,在 JavaScript 术语中为对象,其键是模块内部分区标识符,值是 Google Drive 中的标识符,例如 0B-e8MNz22zZvfk9wS0o1c2JMZHIyV2xDeHFwLWQ2anJHQTB5YzNlVDg3YjJKX1ZHTVlEMVk。如果设置,则将覆盖具有相同键的配置元素,并将所有新元素添加到末尾。

cfg – 配置对象,将覆盖从 config.js 读取的元素(如果键匹配)。

checkConfig – 检查所有必要的配置指令是否存在和格式正确,以使模块正常工作。

DriveAPI.prototype.checkConfig = function ()

参数:


##### initFolders – 设置用于写入的目录数组。

DriveAPI.prototype.initFolders = function (folders)

参数

folders – 纸张标识符数组。


#####setActiveFolder – 设置默认写入文件的目录。严格来说,对于 getFiles 方法也是适用的,如果调用时未指定第二个参数,但不认为这种方式使用 getFiles 是正确的。

DriveAPI.prototype.setActiveFolder = function (label)

参数

label – 目录标识符。


#####addFolder - 添加用于写入和读取的额外目录

DriveAPI.prototype.addFolder = function (label, folder\_id)

参数

label - 对象中的目录标识符

folder_id - 存储中的目录标识符


##### deleteFolder - 删除可用目录列表中的元素。

DriveAPI.prototype.deleteFolder = function (label)

参数

label - 要删除的目录标识符


##### getFile - 获取已上传文件的信息

DriveAPI.prototype.getFile = function (callback, file\_id)

参数

callback - 执行成功从存储中获取信息的功能; file_id - 存储中文件的标识符。


##### getFiles - 获取目录中所有文件的信息。

DriveAPI.prototype.getFiles = function (callback, folder\_id)

参数

callback - 执行成功获取文件信息的功能; folder_id - 目录标识符。


##### uploadFile - 以多部分方式将文件上传到存储。

DriveAPI.prototype.uploadFile = function (file, callback, folder\_id)

参数

file - 输入[type=file]中的文件; callback - 成功上传的回调函数; folder_id - 文件父目录的标识符。


#####IEBinary – 从文件或文件的一部分创建字节序列(适用于IE)

DriveAPI.prototype.IEBinary = function (buffer)

参数

buffer - 文件内容


##### getChunkRange - 创建用于指定字节区间、文件部分并将其发送到服务器的头部。

DriveAPI.prototype.getChunkRange = function (total\_size, last\_size)

参数

total_size - 文件总字节数; last_size - 区间起始值。


#####uploadResumable - 使用断点续传方式将文件上传到服务器。

DriveAPI.prototype.uploadResumable = function (file, callback, folder\_id)

参数

file - 输入[type=file]中的文件; callback - 文件上传成功的回调函数; folder_id - 文件父目录的标识符。


##### readChunk - 读取文件的一部分。

DriveAPI.prototype.readChunk = function (reader, file, shank, last\_size)

参数

reader - FileReader对象; file – 文件;* *shank - 读取的块大小; last_size - 从哪里开始读取。


##### updateFile - 使用multipart方式将已存储文件替换为新上传的文件。

DriveAPI.prototype.updateFile = function (file, file\_id, callback)

参数

file - 输入[type=file]中的文件; file_id - 要替换的文件标识符; callback - 文件替换成功的回调函数。


##### updateResumable - 使用resumable方式将已存储文件替换为新上传的文件。

DriveAPI.prototype.updateResumable = function (file, file\_id, callback)

参数

file - 输入[type=file]中的文件; file_id - 要替换的文件标识符; callback - 文件替换成功的回调函数。


##### createFolder - 在存储中创建目录并返回其标识符。

DriveAPI.prototype.createFolder = function (callback, parent\_id)

参数

callback - 创建目录成功的回调处理函数; parent_id - 创建目录的父目录。


##### delete - 从存储中删除文件或目录

DriveAPI.prototype.delete = function (id, callback)

参数

id - 要删除的对象的标识符; callback - 删除成功的回调处理函数。


##### getInternetExplorerVersion - 如果是IE,则返回浏览器版本

DriveAPI.prototype.getInternetExplorerVersion = function ()

参数: 无。


##### setToken - 从服务器请求访问存储的令牌并将其保存在对象中。

DriveAPI.prototype.setToken = function ()

参数:


##### deleteToken - 删除访问存储的令牌

DriveAPI.prototype.deleteToken = function ()

参数: 无。