azure - 将 Excel 文件上传到 Microsoft Graph API Beta 时文件损坏

标签 azure xlsx microsoft-graph-api

我们正在尝试将 Microsoft Excel 文件上传到 OneDrive,但每次执行此操作时文件都会损坏。

我们尝试使用[这些说明]对以下设置排列发出 PUT 请求:

内容编码:

  • 文字/计划
  • application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

发布机构:

  • 来自磁盘的 XLSX 文件原始字节
  • 编码为 UTF8 字符串的 XLSX 文件
  • 编码为 base64 的 XLSX 文件

如果我们下载上传的文件,它看起来几乎相同,但有一些二进制区域不同。

如果您愿意从互联网上打开 Excel 文件,我已经上传了一个示例 the file we uploadcorrupted file OneDrive saves .

这具有可以通过单个参数修改来修复的错误的味道......我只是不知道它是什么。

有人有想法吗?谢谢!

最佳答案

谢谢@GSM。这是我们的 TypeScript 代码。

var fileContent = FileSystem.readFileSync(localFile);
var url = `https://graph.microsoft.com/beta/me/drive/root/children/${doc.name}.xlsx:/content`,

var opts {
  url: url,
  method: 'PUT',
  headers: [
    'Content-Type': 'text/plain',
    'Authorization': token
  ],
  body: fileContent
};
var requestOpts = {
  url: `https://${domain}${opts.path}`,
  method: opts.method,
  headers: {},
};

request(opts, cb);

我看到的唯一区别是您使用备用路径来上传文件,这也记录在 GraphAPI 页面上。如果我们使用您正在使用的路径,我们会收到错误消息:

{
  "error": {
    "code": "BadRequest",
    "message": "Entity only allows writes with a JSON Content-Type header.",
    "innerError": {
      "request-id": "2a2e7588-3217-4337-bee3-f8aff208510c",
      "date": "2016-05-30T16:35:50"
    }
  }
}

..这很奇怪,因为它让我认为你的代码也不应该工作。

更新——答案

通过将文件读入字符串,然后将其写入定义 PUT 参数的 JSON 对象,我们破坏了它。我们通过简单地将文件读取流直接传送到打开的 HTTP 请求来解决了这个问题。

关于azure - 将 Excel 文件上传到 Microsoft Graph API Beta 时文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37490889/

相关文章:

performance - Windows Azure 表存储 LINQ 运算符

azure - 有没有办法在 Azure API Manager 开发人员门户中以编程方式登录(登录)用户?

php - 使用 PHP 读取 XLS 导入 MySQL

azure - 使用 Azure v2.0 撤销同意

Azure函数应用程序读取O365组邮箱

node.js - 如何通过Javascript重新计算excel文件中的所有公式?

将 write.xlsx 与使用 'dplyr' 函数创建的对象一起使用时出现 R 错误

azure - 访问 Microsoft Graph API : Resource app ID: 00000002-0000-0000-c000-000000000000

microsoft-graph-api - Microsoft Graph API 下载文件内容返回未授权 401

powershell - 在 Azure datalake 中附加 csv 文件