Salesforce - SharePoint 文件上传 400 错误请求错误

问题描述 投票:0回答:2

我正在尝试将文件从 Apex 上传到 Sharepoint,但出现“400 错误请求”错误。但是从 JS 代码开始工作。以下是我的代码片段:

  1. 顶点代码
Http http = new Http();
HttpRequest httpRequestToSend = new HttpRequest();  
httpRequestToSend.setEndpoint('https://sample.sharepoint.com/sites/siteName/_api/web/GetFolderByServerRelativeUrl(\''+'/sites/siteName/Shared Documents'+'\')/Files/Add(url=\''+'document3.txt'+'\', overwrite=true)');
httpRequestToSend.setMethod('POST');
httpRequestToSend.setHeader('Authorization', 'Bearer ' + token);
httpRequestToSend.setHeader('Content-Type','application/json; odata=verbose');

httpRequestToSend.setBodyAsBlob(Blob.ValueOf('test Message'));
System.debug('***** httpRequestToSend-->' + httpRequestToSend);
Http http1 = new Http();   
HttpResponse httpResponse1 = http1.send(httpRequestToSend);  
System.debug('***** httpResponse-->' + httpResponse1.toString());
    System.debug(httpResponse1.getBody());
  1. JS代码
var myHeaders = new Headers();
        myHeaders.append("Authorization", "Bearer " + Token);
        myHeaders.append("Content-Type", "application/json;odata=verbose");

        var requestOptions = {
          method: 'POST',
          headers: myHeaders,
          body: fileBuffer,
        };

        fetch('https://sample.sharepoint.com/sites/siteName/_api/web/GetFolderByServerRelativeUrl(\'/sites/siteName/Shared Documents\')/Files/Add(url=\'test.txt\', overwrite=true)', requestOptions)
          .then(response => response.text())
          .then(result => console.log(result))
          .catch(error => alert('error', error));
      } 

谢谢

javascript sharepoint salesforce apex apex-code
2个回答
0
投票

根据文档salesforce 无法直接与 FTP 通信,这意味着无法在 FTP 服务器上读取/写入文件。

我也遇到过这个问题,我是这样解决的:-

第 1 步:使用任何语言(C#、Python)创建并托管一个外部 API,该 API 采用两个参数,一个为 fileName,另一个为 fileData,并上传该文件。

Step2:在 Salesforce 端,使用 HttpRequest 使用该 API 并将您的文件作为 filedatafileName.

public void uploadFileToFTP_Service(string fileName,string fileData)
{
    string value='{"fileName":"'+fileName+'","fileData": "'+fileData+'"}';
    HttpRequest req = new HttpRequest();
    req.setEndpoint('http://yourhostedApIPath:9001/data');
    req.setMethod('POST');
    req.setTimeout(120000);        
    req.setHeader('content-type','application/json; charset=utf-8');
    req.setBody(value);        
    Http http = new Http();
    HttpResponse res = http.send(req);
    system.debug('Status code: ' + res.getStatusCode());
}

0
投票

今天我为此苦苦思索了一段时间,最终通过转义我的相对 url 路径中的空格字符(我希望文件名可能需要相同的解决方法)来克服“400 Bad Request”错误。

每个空格字符 (" ") 必须替换为 ASCII 引用 "%20"

所以在您的示例中,端点 url:

'https://sample.sharepoint.com/sites/siteName/_api/web/GetFolderByServerRelativeUrl(\'/sites/siteName/Shared Documents\')/Files/Add(url=\'test.txt\', overwrite=true)'

应该改为:

'https://sample.sharepoint.com/sites/siteName/_api/web/GetFolderByServerRelativeUrl(\'/sites/siteName/Shared%20Documents\')/Files/Add(url=\'test.txt\', overwrite=true)'

至少就我而言,这解决了问题。

© www.soinside.com 2019 - 2024. All rights reserved.