Google Drive 使用 javascript 断点续传

2023-12-08

我正在尝试使用以下方式将文件上传到 Google 云端硬盘适用于 JavaScript 的 Google API 客户端库 and 可断点上传类型.

我成功进行了身份验证并获取了上传 URI,但在发送实际数据时遇到了问题。如果文件仅包含 ASCII 字符,则文件会成功发送到云端硬盘,但如果包含特殊字符 (åäö) 或二进制文件(例如 PNG),文件会损坏。我的猜测是,在进程中的某个地方,文件在客户端被编码为 un​​icode。

如果我使用“btoa()”将原始数据编码为base64,并将标头“Content-Encoding:base64”添加到数据发送请求中,则文件上传正常。然而使用这种方法会增加33%的开销,这对于计划上传的文件大小为100MB到1GB来说是相当大的。

以下是一些代码示例:

获取断点续传URI:

// Authentication is already done
var request = gapi.client.request({
    "path": DRIVE_API_PATH, // "/upload/drive/v2/files"
    "method": "POST",
    "params": {
        "uploadType": "resumable"
    },
    "headers": {
        "X-Upload-Content-Type": self.file.type,
        //"X-Upload-Content-Length": self.file.size
        // If this is uncommented, the upload fails because the file size is
        // different (corrupted file). Manually setting to the corrupted file
        // size doesn't give 400 Bad Request.
    },
    "body": {
        // self.file is the file object from <input type="file">
        "title": self.file.name, 
        "mimeType": self.file.type,
        "Content-Lenght": self.file.size,
    }
});

一次性发送整个文件:

// I read the file using FileReader and readAsBinaryString
// body is the reader.result (or btoa(reader.result))
// and this code is ran after the file has been read
var request = gapi.client.request({
    "path": self.resumableUrl, // URI got from previous request
    "method": "PUT",
    "headers": {
        //"Content-Encoding": "base64", // Uploading with base64 works
        "Content-Type": self.file.type
    },
    "body": body
});

我错过了什么吗?是否可以以二进制流方式上传文件?我是上传 HTML 和 Javascript 文件的新手,我还没有找到任何使用 Google Javascript 库进行可恢复上传的示例。有类似的问题SO 没有答案。


Blob 类型是一个热门话题XMLHttpRequest且尚未真正成熟。我建议您坚持使用 base64 编码。 Google 的 JavaScript 客户端库不支持可恢复上传,因为客户端浏览器应用程序不太可能将非常大的文件直接上传到 Google Drive。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google Drive 使用 javascript 断点续传 的相关文章

  • 在 Three.js 中绕点旋转对象的正确方法是什么?

    关于 Three js 的大多数教程 问题都建议使用 Three js 绕点旋转对象的方法是在要旋转的位置创建父对象 附加对象 然后移动子对象 然后 当父级旋转时 子级围绕该点旋转 例如 Make a pivot var pivot new
  • JavaScript 添加布尔值

    console log true true 2 console log typeof true true number console log isNaN true true false 为什么两个布尔类型相加会产生一个数字 我有点理解 如
  • 浏览器视口大小(以设备像素为单位)

    Goal 我希望 Flash 能够获得有关浏览器视口宽度和高度 以设备像素为单位 的准确信息初始化 调整大小或浏览器缩放事件时 规格 我需要将 flash 嵌入到在 chrome safari firefox 等中运行的 html 页面中
  • 位置特征检测:固定

    我正在尝试找到一个脚本来检测设备是否放置position fixed元素相对于视口而不是整个文档 目前 标准桌面浏览器和 Mobile Safari 适用于 iOS 5 都是这样做的 而 Android 设备则相对于整个文档放置固定元素 我
  • 如何正确清理来自 AngularJS 控制器的无效输入的表单?

    我有一个 AngularJS 表单 其中包含 除其他字段之外 类型之一url 后者很重要 因为这会强制相应的输入成为有效的 URL 在某些条件下 例如 要关闭具有此类表单的模式对话框 我想以编程方式清除该表单 为此 我实现了方法reset基
  • IntersectionObserver是否支持水平滚动观察?

    我制作了几个垂直滚动 IntersectionObserver 模块 但我对水平滚动感兴趣 根将是 div 观察目标将是 img 我想观察当 img 放大但 div 保持视口宽度时的变化 我什至不确定移动 Safari 是否会将缩放后的图片
  • 为什么 setTimeout 在 Chrome 中触发两次,而在 IE 或 Firefox 中则不然?

    有人能告诉我为什么 javascript 函数 生成新号码 在 Chrome 中触发两次 但在 IE 或 Firefox 中则不会 使用 Chrome 20 0 1132 57 IE9 和 Firefox 13
  • 按下回车键时不刷新页面

    我遇到了一些问题 只要表单中有输入 回车键就会触发页面刷新 下面的代码 如果按下回车并且文本区域 input 中没有输入任何文本 则不会刷新页面 但是如果按下回车并且 input中有输入或者光标位于文本区域 我不确定是什么触发了它 因为 s
  • ReactTransitionGroup 不适用于 React-redux 连接组件

    我正在开发一个更大的项目 但我创建了这个简短的示例来说明问题 如果我使用Box组件 它的工作原理 它在控制台中输出componentWillEnter and componentWillLeave当我们点击按钮时 如果我使用BoxConta
  • 如何通过单击链接来更改 div 的内容?

    这是我的网页的 修改后的 jsfiddle 它还有很多 而且定位是正确的 与此相反 http jsfiddle net ry0tec3p 1 http jsfiddle net ry0tec3p 1 a href class btn1 st
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 合并从 Google Drive 下载的分割 zip 文件 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我从 Google Drive 下载了 1 个 10 GB 的大文件夹 但它变成了几个压缩文件 我想将从 Google Drive 下载的
  • 如何使用 JavaScript 或 jQuery 克隆 HTML 元素的样式对象?

    我正在尝试克隆元素的样式对象 这应该允许我在更改后重置所述元素的样式 例如 el style left 50px curr style left 50px Modify the elements style The cloned style
  • Rails 3.1+ 的 Jasmine 与 Mocha JavaScript 测试 [已关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我对茉莉花有经验并且非常喜欢它 有谁有 Jasmine 和 Mocha 的经验 特别是 Rails 的经验吗 我想知道是否值得转用 我已经在 J
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • 滚动顶部不符合预期

    Note 由于上次忘记奖励而重新开放赏金 A Woff 大师已经给出答案 我想在用户展开某一行时到达该行 这样当最后一个可见行展开时 用户不必向下滚动即可查看内容 I used example tbody on click td green
  • 什么是 WKWebView 中的 WKErrorDomain 错误 4

    fatal error LPWebView encounters an error Error Domain WKErrorDomain Code 4 A JavaScript exception occurred UserInfo 0x7
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • 将控制台输入线保持在输出下方

    编辑 我目前正在尝试制作一个小型 tcp 聊天应用程序 发送和接收消息已经可以正常工作 但问题是 当我在收到消息时开始输入消息时 它出现在我正在编写的文本之后 截屏 http s7 directupload net images 14081
  • 如何获取 Azure IoT Hub 上设备的公共 IP 地址?

    我有兴趣获取 Azure IoT 中心上连接设备的公共 IP 地址 我已经检查了 SDK 但看不到任何获取它的方法 我的目的是通过 IP 对设备进行地理定位 这不准确 但对我有用 有什么线索吗 似乎没有这样的开箱即用功能 解决方法是将设备
  • 在现有 UIKit 应用程序中包含 SwiftUI 视图

    是否可以使用 SwiftUI 与现有 UIKit 应用程序并排构建视图 我有一个用 Objective C 编写的现有应用程序 我已经开始迁移到 Swift 5 我想知道是否可以将 SwiftUI 与现有的 UIKit xib 视图一起使用
  • 用 grid 和 gtable 拆解 ggplot

    我正在努力构建基于的双轴图ggplot对象 根据巴蒂斯特的建议 我已将问题分解为更小的部分 目前的问题是 如何删除所有数据grobs 同时保留轴 轴标签 轴刻度线和网格线 我所说的 数据 是指与以下内容相关的数据geom line and
  • Pro AngularJS - 你能帮忙解释一下这段代码吗?

    我正在读 Apress 写的一本名为 Pro AngularJS 的书 我只是想确保我理解所有代码 但我对下面的代码有点困惑 下面是书中的一个自定义过滤器 它接受 2 个参数 数据数组和属性名称 在书中 属性名称是数据中的类别键 设置它是为
  • gcc 中类型的非常量引用初始化无效,但 Visual Studio 中无效

    我有一些代码 其中 IInterface 是一个抽象类 我正在写这个 IInterface q InterfaceImpl 并在 Visual Studio 2008 中编译它并且运行良好 然后我将它移植到 gcc 项目中 突然出现这个错误
  • SQL Server - 在 WHERE 子句中使用 CASE

    我想用CASE in WHERE子句 但它返回错误 我可以在 where 子句中使用 CASE 吗 或者如何解决它 谢谢 SELECT FROM hris leave dbo tbl act inner join hris leave db
  • 如何用 C 语言按行块处理文本文件?

    我正在用 C 编写一个程序 该程序处理一个文本文件并跟踪每个唯一的单词 通过使用一个具有该单词的 char 数组和其出现次数的计数的结构 并将该结构存储到数据结构中 然而 作业中包含这样的内容 整个 txt 文件可能非常大 无法保存在主内存
  • 什么是“<调用>d__40”?

    使用 Powershell System Management Automation Cmdlet Invoke 返回类型的对象
  • 单击 HTML5 数据列表选项时执行操作

    我正在使用一个
  • 改变 CGRect (或任何结构)?

    我在我的代码中做了很多这样的事情 self sliderOne frame CGRectMake newX 0 self sliderOne frame size width self sliderOne frame size height
  • 卷积神经网络输出所有标签的相同概率

    我目前正在 MNIST 上训练 CNN 随着训练的进行 输出概率 softmax 给出 0 1 0 1 0 1 初始值不统一 所以我不知道我是否在这里做了一些愚蠢的事情 我只训练了15步 只是为了看看训练进展如何 尽管这个数字很低 但我认为
  • Swift:无法以编程方式编辑自定义表格单元格的属性

    我正在尝试更改自定义表格单元格内视图的颜色 并且我有一个可以使用的出口 我可以更改此视图的其他属性 例如 isHidden but backgroundColor似乎不起作用 知道我做错了什么吗 UIColor 名为 绿色 适用于应用程序的
  • 如何在 swift 中将双精度型转换为字节数组?

    我知道如何在java中做到这一点 参见here 但我找不到 java 的 ByteBuffer 的快速等效项 因此找不到它的 putDouble double value 方法 基本上 我正在寻找这样的函数 typealias Byte U
  • 有没有办法在每个页面上打印网页页眉/页脚?

    根据我的研究 似乎我想做的事情是不可能的 但以防万一发生了变化 我想检查一下是否有人想出了一种方法来做到这一点 我有一个网络应用程序 可以根据浏览器窗口中的用户选择生成打印报告 我有一个自定义页眉和页脚 当从浏览器打印报告时 应在每个打印页
  • 在 R 中使用 ggplot2 创建“雷达图”(又名星图;蜘蛛图)

    我想创建一个如下图所示的图 我知道我可以使用radarchart函数来自fmsb包裹 我怀疑是否ggplot2可以用极坐标这样做吗 谢谢 首先 我们加载一些包 library reshape2 library ggplot2 library
  • JS:如何在没有 XMLHttpRequest 的情况下对本地文件进行 Base64 编码?

    我正在尝试对本地文件进行 Base64 编码 它就在我的旁边 js文件 因此不会进行上传 解决方案如this using XMLHttpRequest 出现跨站点脚本错误 我正在尝试这样的事情 这不起作用 但它可能有助于解释我的问题 var
  • 获取 MySQL 数据库列表和服务器版本?

    我的 MySQL 连接字符串是 Server localhost User ID root Password 123 pooling yes charset utf8 DataBase 我的问题是 我应该编写什么查询来获取存在的数据库名称
  • Qt:重叠半透明QgraphicsItem

    我使用 QGraphicsView 一段时间了 我面临着一个先决条件 我不确定使用这个框架是否可以满足它 尽可能简单地说 我有 2 个重叠的 RectItem 和一个半透明的 QBrush 两者相同 是否可以防止重叠区域变得更加不透明 我只
  • Google Drive 使用 javascript 断点续传

    我正在尝试使用以下方式将文件上传到 Google 云端硬盘适用于 JavaScript 的 Google API 客户端库 and 可断点上传类型 我成功进行了身份验证并获取了上传 URI 但在发送实际数据时遇到了问题 如果文件仅包含 AS