当前位置: 首页 > 知识库问答 >
问题:

如何在Unity3d中使用Microsoft graph API上载/下载文件

赫连靖琪
2023-03-14

我可以在Microsoft graph上使用Unity3d登录oauth 2,我请求了我的应用程序的此权限:https://graph.microsoft.com/files.readwrite.appfolder

在完成了通常的代码流(重定向到url、用户的权限、用身份验证码交换令牌代码和用令牌交换承载身份验证码)之后,我就可以登录了。

问题是上传小文件不起作用:https://docs.microsoft.com/en-us/onedrive/developer/rest-api/api/driveitem_put_content

我认为这是我能做的最好的:

string myData = File.ReadAllText(Application.persistentDataPath + "/" + "provaupload.json");
    using (UnityWebRequest www = UnityWebRequest.Post("https://graph.microsoft.com/v1.0/me/drive/root:/AppTry/provaupload.json:/createUploadSession", myData)) {
        www.SetRequestHeader("Authorization", "Bearer <code>");
        www.SetRequestHeader("Content-Type", "application/json");
        yield return www.SendWebRequest();

        if (www.isNetworkError || www.isHttpError) {
            Debug.Log(www.error + " " + www.downloadHandler.text);
        } else {
            Debug.Log("Upload complete! " + www.downloadHandler.text);
        }
    }

我得到这个错误:

Generic/unknown HTTP error {
  "error": {
  "code": "BadRequest",
  "message": "Unable to read JSON request payload. Please ensure Content-Type header is set and payload is of valid JSON format.",
  "innerError": {
    "request-id": "id",
    "date": "2018-07-20T06:24:30"
  }
}

我也尝试了WWW类或Put而不是Post,但我得到了“无效的API”。可能我的问题在于基本url:https://graph.microsoft.com/v1.0/me

或者它可能位于路径根:/AppTry/provaupload中。json

或者在许可证中。

我真的不知道。

如果您知道如何使用Microsoft Graph和一个驱动器进行Rest调用(即使不在unity3d中,即使您不知道如何解决我的特定问题),那么可以获得一些示例。

共有1个答案

莫欣悦
2023-03-14

要上载文件,请使用UploadHandler。您还必须将字符串编码为UTF8。正如您在评论部分所提到的,您似乎必须使用PUT而不是POST,并且url应该更改为其他内容。

更像这样的东西:

string myData = File.ReadAllText(Application.persistentDataPath + "/" + "provaupload.json");
string url = "https://graph.microsoft.com/v1.0/me/drive/root:/AppTry/provaupload.json:/content";

using (UnityWebRequest www = new UnityWebRequest(url, "PUT"))
{
    byte[] dataToSend = new System.Text.UTF8Encoding().GetBytes(myData);
    www.uploadHandler = (UploadHandler)new UploadHandlerRaw(dataToSend);
    www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

    www.SetRequestHeader("Authorization", "Bearer <code>");
    www.SetRequestHeader("Content-Type", "application/json");
    yield return www.SendWebRequest();

    if (www.isNetworkError || www.isHttpError)
    {
        Debug.Log(www.error + " " + www.downloadHandler.text);
    }
    else
    {
        Debug.Log("Upload complete! " + www.downloadHandler.text);
    }
}
 类似资料:
  • 由于没有对Unity3d和Dropbox的官方支持,我使用的是HTTP API。我可以使用代码流(通过在Unity3d中使用Application.OpenURL)执行oauth2/authorize,也可以执行oauth2/token Post部分(因此我可以登录并获得从oauth2/authorize获得的代码)。 问题是我真的不知道如何上传和下载文件。我尝试的内容(此代码位于协同例程中):

  • 问题内容: 我正在尝试获取下载链接并下载文件。 我有一个包含以下链接的日志文件: 我有这样的代码: 到目前为止,我不知道如何获取下载链接并下载它。可以使用selenium下载文件吗? 问题答案: 根据文档,您应该配置为自动下载具有指定内容类型的文件。这是在txt文件中使用第一个URL的示例,该文件将文件保存在当前目录中: 注意,我也简化了xpath。

  • 我想用php从我的服务器下载文件。我搜索了谷歌,在这里找到了答案。这个答案表明我必须为此编写这些代码。 但我能做到这一点,只需这两行: 那么,我为什么还要像上面的代码那样多写几行呢?

  • 问题内容: 我试图使用Python从Internet下载某些内容,但我使用的是urllib模块,但无法正常工作。我希望能够将下载的文件保存到我选择的位置。如果有人可以用清晰的例子向我解释如何做到这一点,将不胜感激。 问题答案: 我建议像这样使用urllib2: 您甚至可以将其缩短为(尽管,如果您打算将每个单独的调用括在-中,则不想将其缩短):

  • 我正在使用axios处理基本的http请求,如GET和POST,并且运行良好。现在我需要能够下载Excel文件了。axios是否可以实现这一点?如果有,有人有一些示例代码吗?如果没有,我还可以在React应用程序中使用什么来执行相同的操作?

  • 问题内容: 我正在尝试使用selenium从网站下载pdf文件,但我能够打开文件,但无法使用代码自动下载。 码: 请提出建议。先感谢您 问题答案: 以上问题现已解决