【问题标题】:How to upload content of Excel file through #MicrosoftGraph如何通过#MicrosoftGraph 上传 Excel 文件的内容
【发布时间】:2016-08-30 07:08:18
【问题描述】:

我目前正在使用 xlsx NodeJS 库在我的文件系统上生成一个文件,我还使用 create item 端点 (https://graph.microsoft.io/en-us/docs/api-reference/beta/api/item_post_children) 在 OneDrive 上创建了一个空文件

现在,我想用我在文件系统上的文件内容上传 OneDrive 上的文件内容。我正在尝试使用 Upload Item 端点 (https://graph.microsoft.io/en-us/docs/api-reference/beta/api/item_uploadcontent) 执行此操作,并且请求通过正常,但是当我尝试使用 Excel Online 打开文件时,我收到文件已损坏的消息

无论如何,如果我通过 OneDrive 网络界面上传文件,一切正常

知道为什么内容上传不起作用吗?

【问题讨论】:

  • 嗨,Miloš,您能否使用 Fiddler 或类似工具捕获您的 HTTP 请求,并查看发送的内容是否符合您的预期?我的猜测是您的上传代码可能以某种编码格式发送它,并且服务器在存储它之前没有对其进行解码。此外,我们建议您在上传内容之前避免创建空文件。只需一次性上传内容。这样,如果您的上传出现问题,您就不会被困在可能让用户感到困惑的空文件中。
  • 你是如何加载你的 xlsx 文件的?显然,使用 OneDriveSDK 对我有用。如果您使用 WebClient 之类的工具来加载文件,则需要注意格式,正如 daspek 指出的那样。
  • 嗨@daspek,谢谢你的回答,我认为这是一个问题,但我有匹配编码格式的问题,我发现的最后一件事是应该是base64编码的字符串,我有累了,但不工作你知道也许哪种格式有效吗?文档对此只字未提。

标签: node.js office365 microsoft-graph-api


【解决方案1】:

文件的内容应该是上传文件的二进制流。我创建了一个示例 Web 应用程序供人们使用名为 Visual Graph Explorer 的 Graph API。使用 O365 凭据登录 Web 应用程序后,您可以单击文件链接并上传文件。在右侧,您将看到请求和响应的日志。如果您想查看完整的源代码,可以在 GitHub 上查看。

我用于上传的代码是 JavaScript 并在客户端运行。

var f = document.getElementById("inputFile").files[0];
var r = new FileReader();
r.onloadend = function (e) {
        var data = e.target.result;
        var url = "https://graph.microsoft.com/v1.0/users/" + $scope.upn + "/drive/root/children/" + f.name + "/content";
        $http.put(url, data)
                .then(function successCallback(response) {
                        document.getElementById("inputFile").value = "";
                }, function errorCallback(response) {
                        $scope.error = JSON.stringify(response);
                        $scope.loadingMessage = "";
                })
}
r.readAsBinaryString(f);

【讨论】:

    【解决方案2】:

    另一种方法可能是上传一个空的 Excel 文件并使用Excel REST API 更新数据。

    【讨论】:

      【解决方案3】:

      将其作为二进制文件上传。将excel文件上传到onedrive的Ruby代码

      require 'net/http'
      
      upload_path = 'https://graph.microsoft.com/v1.0/drive/root/children/test_file.xlsx/content'
      request = Net::HTTP::Put.new(upload_path, {'Authorization': token })    
      f= File.new(file_path, "r+b")
      request.body = f.read
      resp = https.request request
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-05
        • 2021-05-04
        相关资源
        最近更新 更多