avtomon/drive-api
jQuery包装器,用于在没有认证的情况下使用Google Drive API
Requires
- bower-asset/jquery: *
- google/google-api-php-client: *
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 ()
参数: 无。