Office365 Java中的Microsoft Graph API配置文件图片更新

Office365 Java中的Microsoft Graph API配置文件图片更新,office365,azure-active-directory,microsoft-graph-api,Office365,Azure Active Directory,Microsoft Graph Api,我正在尝试使用Microsoft Graph API更新Azure广告帐户的用户图片 我遵循了这一点 这对我来说似乎很清楚,但我无法上传图片,它失败并显示ResSourceNotFind错误消息 下面是我的代码,用于检索令牌和上载用户图片。检索令牌效果良好 private String getToken() throws Exception { String access_token = ""; String url = "https://login.windows.net/TE

我正在尝试使用Microsoft Graph API更新Azure广告帐户的用户图片

我遵循了这一点 这对我来说似乎很清楚,但我无法上传图片,它失败并显示ResSourceNotFind错误消息

下面是我的代码,用于检索令牌和上载用户图片。检索令牌效果良好

private String getToken() throws Exception {
    String access_token = "";
    String url = "https://login.windows.net/TENANTID/oauth2/token";
    HttpClient client = HttpClients.createDefault();
    HttpPost post = new HttpPost(url);

    post.setHeader("Content-Type", "application/x-www-form-urlencoded");

    List<NameValuePair> urlParameters = new ArrayList<NameValuePair>();
    urlParameters.add(new BasicNameValuePair("grant_type", "client_credentials"));
    urlParameters.add(new BasicNameValuePair("client_id", "APPLICATIONID"));
    urlParameters.add(new BasicNameValuePair("client_secret", "SECRET"));
    urlParameters.add(new BasicNameValuePair("resource", "https://graph.microsoft.com"));

    post.setEntity(new UrlEncodedFormEntity(urlParameters));

    HttpHost proxy = new HttpHost("PROXYADDRESS.com", 8080, "http");
    RequestConfig config = RequestConfig.custom().setProxy(proxy).build();
    post.setConfig(config);

    HttpResponse response = client.execute(post);
    logger.debug("Sending 'POST' request to URL : " + url);
    logger.debug("Post parameters : " + post.getEntity());
    logger.debug("Response Code : " + response.getStatusLine().getStatusCode());

    String responseAsString = EntityUtils.toString(response.getEntity());
    try {
        access_token = responseAsString.split(",")[6].split("\"")[3]; // get the access_token from response
        logger.debug(access_token);
    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }
    return access_token;
}
这就是我得到的结果

2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:391)] Sending 'POST' request to URL : https://login.windows.net/XXXXXXX/oauth2/token
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:392)] Post parameters : [Content-Type: application/x-www-form-urlencoded,Content-Length: 182,Chunked: false]
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:393)] Response Code : 200
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:398)] XXXXXXXXXXXX
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:448)] Sending 'PATCH' request to URL : https://graph.microsoft.com/v1.0/users/USERPRINCIPALNAME@XXXX.COM/photo/$value
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:449)] Post parameters : [Content-Length: 5252,Chunked: false]
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:450)] Response Code : 404
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:453)] {
  "error": {
    "code": "ResourceNotFound",
    "message": "Resource could not be discovered.",
    "innerError": {
      "request-id": "XXXXXXXXXXXXXXXXX",
      "date": "2018-08-13T09:54:11"
    }
  }
}
有人有办法解决这个问题吗?
谢谢

所以,除了base64转换之外,我的代码中没有错误。它失败,因为用户没有邮箱。如果我选择了一个有邮箱的用户,它将返回一个SUCCESS 200并更新图片

现在,最后一个问题,你知道如何删除图片吗?在Microsoft Graph文档中找不到


谢谢

所以,除了base64转换之外,我的代码中没有错误。它失败,因为用户没有邮箱。如果我选择了一个有邮箱的用户,它将返回一个SUCCESS 200并更新图片

现在,最后一个问题,你知道如何删除图片吗?在Microsoft Graph文档中找不到

谢谢

你知道如何删除图片吗?在Microsoft Graph文档中找不到

据我所知,没有删除PhotoRESTAPI。从中,我们发现没有删除照片API

我试图删除与邮递员的照片。我得到的方法是不允许的

我还通过office365网站查看了我的个人资料,没有删除照片的选项。但是,如果你想更改照片,你可以将照片更新为你提到的另一张照片

你知道如何删除图片吗?在Microsoft Graph文档中找不到

据我所知,没有删除PhotoRESTAPI。从中,我们发现没有删除照片API

我试图删除与邮递员的照片。我得到的方法是不允许的

我还通过office365网站查看了我的个人资料,没有删除照片的选项。但是,如果你想更改照片,你可以将照片更新为你提到的另一张照片


不确定为什么要对正文进行base64编码:
new base64().encode(bytesArray)
。如果您正在发送图像,您应该只发送图像字节作为正文。至于404,请确保用户
USERPRINCIPALNAMEOFTHEUSER@DOMAINMAIL.COM
是TENANTID的成员Hello@juunas,你说得对,我删除了Base64的编码(我尝试了这个,因为我在互联网上看到有人这样做了…)。关于404你也是对的。事实上,用户没有电子邮件地址,所以它返回了我404。我已经用邮箱在我的用户上进行了尝试,图片已完全设置!不确定为什么要对正文进行base64编码:
new base64().encode(bytesArray)
。如果您正在发送图像,您应该只发送图像字节作为正文。至于404,请确保用户
USERPRINCIPALNAMEOFTHEUSER@DOMAINMAIL.COM
是TENANTID的成员Hello@juunas,你说得对,我删除了Base64的编码(我尝试了这个,因为我在互联网上看到有人这样做了…)。关于404你也是对的。事实上,用户没有电子邮件地址,所以它返回了我404。我已经用邮箱在我的用户上进行了尝试,图片已完全设置!如果您有任何问题,我建议您更新原始帖子或发布新的SO线程,而不是将其添加到答案中。如果您有任何问题,我建议您更新原始帖子或发布新的SO线程,而不是将其添加到答案中。谢谢,我确认。。不可能。我确认,目前唯一的解决办法是上传一张“阿凡达”图片。。不可能。目前唯一的解决方案是上传一张“阿凡达”图片
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:391)] Sending 'POST' request to URL : https://login.windows.net/XXXXXXX/oauth2/token
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:392)] Post parameters : [Content-Type: application/x-www-form-urlencoded,Content-Length: 182,Chunked: false]
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:393)] Response Code : 200
2018-08-13 11:54:10,511 DEBUG (main) [IDM(getToken:398)] XXXXXXXXXXXX
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:448)] Sending 'PATCH' request to URL : https://graph.microsoft.com/v1.0/users/USERPRINCIPALNAME@XXXX.COM/photo/$value
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:449)] Post parameters : [Content-Length: 5252,Chunked: false]
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:450)] Response Code : 404
2018-08-13 11:54:11,791 DEBUG (main) [IDM(updatePicture:453)] {
  "error": {
    "code": "ResourceNotFound",
    "message": "Resource could not be discovered.",
    "innerError": {
      "request-id": "XXXXXXXXXXXXXXXXX",
      "date": "2018-08-13T09:54:11"
    }
  }
}