Ошибка при загрузке файла Salesforce — SharePoint 400 с ошибочным запросом

#javascript #sharepoint #salesforce #apex #apex-code

#javascript #sharepoint #salesforce #apex #apex-code

Вопрос:

Я пытаюсь загрузить файл из Apex в Sharepoint, но получаю сообщение об ошибке «400 с ошибочным запросом».Но работайте с кодом JS. Ниже приведен мой фрагмент кода :

  1. Код Apex
 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));
      } 
  

Спасибо

Ответ №1:

Согласно документации, salesforce не может напрямую подключиться к FTP, что означает, что не может прочитать / записать файл на FTP-сервере.

Я также столкнулся с этой проблемой, и вот как я ее решил:-

Шаг 1: Создайте и разместите внешний API на любом языке (C #, Python), который принимает два параметра, один как fileName, а другой как fileData, и загружает этот файл.

Шаг 2: В конце Salesforce используйте этот API с помощью HttpRequest и передайте свой файл как filedata и fileName.

 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());
}
  

Ответ №2:

Сегодня я некоторое время ломал голову над этим и, наконец, смог преодолеть ошибку «400 Bad Request», избежав пробелов в моем относительном URL-адресе (я ожидаю, что для имени файла может потребоваться тот же обходной путь).).

Каждый пробел (» «) должен быть заменен ссылкой ASCII » «

итак, в вашем примере 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 Documents')/Files/Add(url='test.txt', overwrite=true)'
  

По крайней мере, в моем случае это устранило проблему.