使用SharePoint 2013中的SP.WebProxy将文件发布到远程服务

时间:2015-07-16 06:10:05

标签: sharepoint sharepoint-2013 office365 office365-apps

我需要在SP 2013 App中使用SP.WebProxy调用远程服务(在sharepoint域外)的帮助。

我能够执行GET调用并正确读取响应,现在我正在尝试执行的是附加了BLOB / Binary文件的PUT请求。

我应该使用什么语法?你有任何关于使用SP.WebProxy发布BLOB / Binary的工作示例吗?

如何指定SP.WebRequestInfo的Body是二进制数据?

这是我到目前为止编写的代码:

var context = SP.ClientContext.get_current();
var request = new SP.WebRequestInfo(); 

request.set_url('http://xxxxxx.xxxx.xx/');
request.set_body(##WHAT SHOULD I PUT HERE????##);
request.set_method("PUT");

var response = SP.WebProxy.invoke(context, request);

context.executeQueryAsync(function () {

    console.log(response.get_statusCode());
    console.log(response.get_body());

    }, function () {
        console.log('Error Code: '++response.get_statusCode());
        console.log('Error Body: ' + response.get_body());
 });

谢谢和问候

埃米利奥

1 个答案:

答案 0 :(得分:0)

发送到REST Web服务URL(YourSiteUrl/_vti_bin/client.svc/ProcessQuery)时,Web代理请求看起来像这样:

<Request xmlns="http://schemas.microsoft.com/sharepoint/clientquery/2009" SchemaVersion="15.0.0.0" LibraryVersion="16.0.0.0" ApplicationName="Javascript Library">
  <Actions>
    <StaticMethod TypeId="{656a77c4-1634-415c-bf85-c6c0cb286e0e}" Name="Invoke" Id="0">
      <Parameters>
        <Parameter TypeId="{71aa825d-bc12-422d-a177-d2e63fe68cd9}">
          <Property Name="Body" Type="Null" />
          <Property Name="Headers" Type="Dictionary">
            <Property Name="Accept" Type="String">application/json</Property>
          </Property>
          <Property Name="Method" Type="String">GET</Property>
          <Property Name="Url" Type="String">...</Property>
        </Parameter>
      </Parameters>
    </StaticMethod>
  </Actions>
  <ObjectPaths />
</Request>

GUID 656a77c4-1634-415c-bf85-c6c0cb286e0e实际上是在SPO后端引用Microsoft.SharePoint.Client.WebProxy,静态方法Invoke是按名称引用的。 (sparse MSDN entry here

GUID 656a77c4-1634-415c-bf85-c6c0cb286e0e是对参数类型Microsoft.SharePoint.Client.WebRequestInfo的引用。 (sparse MSDN entry here

最后一个MSDN条目包含有关Body属性(sparse MSDN entry here)的信息,该信息通知它实际上是String类型。

所以我认为你需要以某种方式编码二进制数据,例如BASE64 ......