从 Google Drive 导出 docx 并转换为 base64

2024-01-12

我正在尝试从 Google 云端硬盘导出 DOCX 文件。

gapi.client.drive.files.export({ fileId: id, alt: 'media', mimeType: _mimeType }).then((_response) => {
                var fileType = _response.headers['content-type'];
                var base64 = new Buffer(_response.body, 'utf8').toString('base64');
                var dataURI = 'data:' + fileType + ';base64,' + base64;

我把它发送到https://content.googleapis.com/drive/v3/files:

mimeType: application/vnd.openxmlformats- officedocument.wordprocessingml.document
alt: media
key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

例如,它适用于图像,但 Word 显示The file is corrupt and cannot be open.

我认为有问题base64.

我该如何解决?

UPDATE:我尝试在 FE 上打开一个文件以确保这不是 BE 问题:

var reader = new FileReader();
                var out = new Blob([_response.body], { type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document" });
                reader.onload = function (e) {
                    window.location.href = reader.result;
                }
                reader.readAsDataURL(out);

结果 -The file is corrupt and cannot be open

我的最终解决方案:

var xhr = new XMLHttpRequest();
            xhr.open("GET", "https://content.googleapis.com/drive/v3/files/" + id + '/export?alt=media&mimeType=' + _mimeType, true);
            xhr.setRequestHeader('Authorization', 'Bearer ' + this.access_token);
            xhr.responseType = 'arraybuffer'
            xhr.onload = () => {
                var base64 = 'data:' + _mimeType +';base64,' + this.base64ArrayBuffer(xhr.response);
                resolve(base64);
            }
            xhr.send();

base64ArrayBuffer来自https://gist.github.com/jonleighton/958841 https://gist.github.com/jonleighton/958841


这个解决方法怎么样?而且在我的环境中,gapi.client.drive.files.export没用。所以我使用 XMLHttpRequest 与xhr.responseType = "blob".

示例脚本:

var accessToken = gapi.auth.getToken().access_token;
var id = "### fileId ###";
var url = "https://docs.google.com/feeds/download/documents/export/Export?id=" + id + "&format=docx&access_token=" + accessToken;
var xhr = new XMLHttpRequest();
xhr.open('get', url);
xhr.responseType = "blob";
xhr.onload = function() {
  var reader = new FileReader();
  reader.onload = function() {

    console.log(reader.result); // dataURI

  }
  reader.readAsDataURL(this.response);
};
xhr.send();

参考 :

  • XMLHttp请求 https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

如果这不是您想要的,我很抱歉。

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

从 Google Drive 导出 docx 并转换为 base64 的相关文章

  • 跨域XMLHttp请求

    这是我的情况 我有一台 Web 服务器机器 一台客户端机器和第三台运行一些侦听 XMLHttpRequest 的程序的机器 客户端从客户端计算机访问网络服务器 进行一些更改 然后单击 保存 此时 数据被发送回网络服务器和第三台机器 所有这些
  • 在 Javascript 中获取第一个数字出现后的子字符串

    我正在尝试提取第一个数字之后 并包括 的字符 ABC 123SD gt 123SD 123 gt 123 123SD gt 123SD ABC gt 我当前的解决方案如下 var string1 ABC 123SD var firstDig
  • Javascript DOM setAttribute 在函数调用中不起作用

    我有一个带有输入元素的 HTML 文件 我希望向其中添加一个名为 valid fieldset011 的新属性 该属性用作 AngularJS 验证器的链接 输入元素具有属性 id fieldset011 如果我使用以下脚本 包含在脚本标签
  • Angular 2 Material 2 日期选择器日期格式

    我不知道如何更改材料2日期选择器的日期格式 我已阅读文档 但我不明白我实际上需要做什么 datepicker默认提供的输出日期格式为f e 6 9 2017 我想要实现的目标是将格式更改为类似的格式9 Jun 2017或任何其他 文档htt
  • ajaxStop() 不触发

    这是不起作用的代码 document ajaxStop function this unbind ajaxStop prevent running again when other calls finish Display everythi
  • 在 javascript、jQuery 或 css 中,如何让 div 或 iframe 展开以填充其余空间

    我有三个 iframe 我将顶部 iframe 设置为 50px 高度 将底部 iframe 设置为 50px 但我希望中间 iframe 扩展以填充其余空间 有没有一种技术可以用来对任何窗口屏幕尺寸执行此操作 谢谢 example
  • 如何防止 gulp-notify 破坏 Windows 中的 gulp-watch?

    我正在使用吞咽通知 https www npmjs org package gulp notify插入 这是我如何在 gulpfile js 中实现它的示例 您可以看到我也在使用 gutil 和 livereload 我不知道它们是否发挥任
  • 如何动态突出显示网页上的字符串?

    我想创建带有 url 的页面 例如 http xyzcorp schedules 2015Aug24 Aug28 Jim Hawkins http xyzcorp schedules 2015Aug24 Aug28 Billy Bones
  • 无法实例化模块 [$injector:unpr] 未知提供程序:$routeProvider

    我从 AngularJS 升级时收到此错误1 0 7 to 1 2 0rc1 ngRoute 模块不再是核心的一部分angular js文件 如果您继续使用 routeProvider 那么您现在需要包括angular route js在你
  • 通过JS Laravel访问存储目录

    有没有办法访问storage目录 该目录已经链接到publicJS 中的目录 我正在尝试制作一个上传图片的表单 验证脚本 if request gt hasFile photos marker gt photos request gt ph
  • 有没有办法将变量从 javascript 导入到 sass 或反之亦然?

    我正在制作一个依赖于块概念的 CSS 网格系统 所以我有一个基本文件 例如 max columns 4 block width 220px block height 150px block margin 10px 它被 mixin 使用 m
  • console.log() 显示同一对象属性的矛盾值

    我想我可能要疯了 我使用 console log 来查看对象的状态 然后在下一行对同一对象的特定属性执行 console log 并为每个属性获取不同的值 我正在使用的代码是 console log this pictures Items
  • 如何更改自动完成中的结果过滤器?

    我不想进行字面匹配 而是想通过正则表达式选择结果 我可以覆盖自动完成的默认行为来完成此任务还是需要替代结构 有一个内置的方法可以做到这一点 只需提供一个函数source http jqueryui com demos autocomplet
  • ToggleClass 动画 jQuery?

    我的网站上有一个部分 当用户单击时我希望它展开 我正在使用 jQuerytoggleClass为了这 expandable function e e preventDefault this closest article toggleCla
  • 在 React Navigation 中将 props 传递给自定义抽屉导航器

    在反应导航抽屉菜单中 我想显示用户名 John Doe 它处于我的主要组件的状态 Router 我怎样才能将自定义抽屉内容组件传递给它 额外信息 我从 AsyncStorage 中获取此名称 组件已挂载 这是我的代码 export defa
  • 在 Fabric.js 中按宽度/高度在另一个画布对象内居中和缩放画布对象

    Goal 将一个对象 水平和垂直 置于另一个对象 矩形或组 的中心canvas via Fabric js或者通过Javascript保持原始对象的长宽比相同 但也不超过父对象的宽度 高度比例 父对象 矩形或组 不会居中于canvas元素
  • 禁用特定 div 上的 Tab 键

    我有以下结构 div div Some content div div Some content div div 我想 禁用 div2 上的 tab 键 我的意思是按下 tab 键时 div2 的元素不会获得焦点 有没有简单的方法可以使用
  • Knockout.js 安全绑定

    我想使用带有淘汰赛的安全绑定 为此我使用敲除安全绑定 js https github com brianmhunt knockout secure binding 谁能解释一下为什么下面的代码不起作用 它会抛出一个错误 未捕获 淘汰 安全
  • JavaScript 数组扩展语法的时间复杂度是多少?

    我想知道在 JavaScript 中使用数组扩展的时间复杂度是多少 是线性 O n 还是常数 O 1 下面的语法示例 let lar Math max nums 传播称为 Symbol iterator 有关对象的属性 对于数组 这将迭代数
  • MongoDB中如何通过引用字段进行查询?

    我有两个 Mongo 模式 User id ObjectId name String country ObjectId Reference to schema Country Country id ObjectId name String

随机推荐

  • 将 Cosmos DB 文档属性序列化和反序列化为字符串

    我正在使用 Json Net 来装饰我的文档属性 public class MyDocumentType Document JsonProperty JsonConverter typeof StringEnumConverter publ
  • 尝试了解如何通过 webpack 导入 Web-Assembly 包

    I m on email protected cdn cgi l email protection我正在尝试使用这个网络程序集库https github com vislyhq stretch https github com vislyh
  • 有没有办法在多台计算机上同步 Sublime Text 设置?

    我有两台电脑 一台台式机和一台笔记本电脑 现在我已经将 ENV 设置为借助 Dropbox 链接进行同步 有没有办法在这两台计算机之间同步我的 Sublime Text 3 设置 包括我的所有插件 首选项文件等 如果是这样 我该如何设置才能
  • 将streambuf的内容复制到字符串

    显然boost asio async read不喜欢字符串 因为它是唯一的重载boost asio buffer让我能够创造const buffers 所以我不得不将所有内容读入流缓冲区 现在我想将streambuf的内容复制到一个字符串中
  • 带有简单 Web 包装器的 python tkinter

    我正在编写一个带有 UI 的简单 python 程序 但我不知道如何将网页放入程序中 我尝试在 Google 上搜索 但找不到任何简单的实现 任何链接都会很棒 回顾一下 我只想要一个简单的 GUI python 程序 其中嵌入了一个网页 基
  • 用户单击 ajax 调用后,打开新选项卡而不使用弹出窗口阻止程序

    我有一个页面 使用户能够通过 HTML5 画布执行图像操作 在该页面上 有一个 facebook 共享按钮 用于在 facebook 上共享画布的生成图像 单击链接时 将向服务器 ASP NET MVC 发送一个ajax请求以执行图像生成
  • 在 javascript 中注入 PHP 的转义字符的正确组合?

    我已经尝试了所有我知道的组合 但无法得到正确的结果 echo lt lt
  • C 中 ptrdiff_t 在哪里定义?

    哪里ptrdiff t在C中定义 它定义在stddef h 该标头定义了整数类型size t ptrdiff t and wchar t 函数宏offsetof 以及常数宏NULL
  • 使用 artisan migrate 时出现流明错误

    我是 Lumen 新手 当我尝试使用时 php artisan migrate 我收到以下错误 PDOException SQLSTATE HY000 2002 No such file or directory 如果我将 localhos
  • 如何在C++中计算文件的行数?

    如何使用标准类来计算行数 fstream and ifstream 这个怎么样 std ifstream inFile file std count std istreambuf iterator
  • 续集查询的可选参数

    早上好 我对 NodeJS sequelize 世界相当陌生 目前在尝试在屏幕上显示仪表板时遇到问题 该仪表板具有三个过滤器 两个日期 期间 客户姓名和员工姓名 用户可以选择无 一个 两个或所有过滤器 我的数据库需要相应地工作 话虽这么说
  • 在 CSS 中创建具有可滚动内容的可变高度“固定”标题

    我想在页面上创建一个标题 当您滚动页面时该标题不会移动 这看起来很简单 只需将 position fixed 添加到样式中 但内容就会出现在标题下方 因为标题 从流中删除 所以我认为的解决方案是在内容中添加 margin top heigh
  • 在Python中取消引用列表内的列表

    当我以 通用 方式定义列表时 gt gt gt a 3 gt gt gt a 然后尝试仅附加到外部列表的第二个元素 gt gt gt a 1 append 0 1 gt gt gt a 0 1 0 1 0 1 如上所示 它附加到外部列表的所
  • 鼠标移开时保持子菜单打开

    我正在开发的导航菜单具有默认的 CSS 行为 对于那些禁用 JavaScript 的极少数人 默认情况下 不显示子菜单 main navigation ul ul display none 将鼠标悬停时 会显示子菜单 main naviga
  • 如何在 UITests 中访问“tableViewCell”中的“detailTextLabel”?

    我想检查是否有tableViewCell detailTextLabel在我的 UITest 中使用给定的字符串 问题是当我搜索时app tables cells children matching staticText 它只会寻找那些标签
  • 函数 nil.id/0 未定义或私有 - Elixir

    我正在尝试使用监护人身份验证来测试用户 ID 是否等于资源 ID 如果没有当前令牌 并且我尝试访问正在检查令牌的网址 则会收到此错误function nil id 0 is undefined or private 我来自红宝石背景 我不知
  • 语法高亮在 Jekyll 的 MD 文件中不起作用?

    使用 kramdown 解析器和 rouge gem 时 语法荧光笔似乎无法在 Jekyll 中工作 引号也不会突出显示和格式化 标记文件 javascript function order words var array words sp
  • 检查变量类型以进行代码分析

    在 Roslyn 代码分析器中检查变量类型的正确方法是什么 我正在注册一个ObjectCreationExpressionSyntax节点和我可以获取类型 但我不确定检查它是否是我关心的类型的正确方法 我找到了一种通过检查显示字符串来做到这
  • 在“onEnter”挂钩中获取状态名称

    我正在构建一个应用程序 我想在用户进入和离开路线时切换服务中的属性 为此 我需要知道该州的名称onEnter and onExit钩子 这对于onExit钩子 因为我可以注入 state服务并读取当前状态的名称 但由于当前状态尚未设置 当o
  • 从 Google Drive 导出 docx 并转换为 base64

    我正在尝试从 Google 云端硬盘导出 DOCX 文件 gapi client drive files export fileId id alt media mimeType mimeType then response gt var f