Ошибка открытия файла Salesforce после создания версии контента с использованием REST API - PullRequest
0 голосов
/ 28 апреля 2018

Я использую машинопись (угловая 4) для публикации в конечной точке Salesforce https://yourInstance.salesforce.com/services/data/v41.0/sobjects/ContentVersion/ Мой http-запрос выглядит следующим образом

Request Headers
Content-Type: multipart/form-data; boundary="1524931327799"
Authorization: Bearer <token>


Request Body
--1524931327799
Content-Disposition: form-data; name="entity_document";
Content-Type: application/json; charset=UTF-8

{  
  "PathOnClient" : "IMG_0400.jpg",
  "Title": "IMG_0400.jpg"
}

--1524931327799
Content-Type: image/jpeg
Content-Disposition: form-data; name="VersionData"; filename="IMG_0400.jpg"

/9j/4AAQSkZJRgABAQAAAQABAAD/4QBsRXhpZgAASUkqAAgA <rest of base64 data>

--1524931327799--

После открытия изображения на платформе salesforce я получаю сообщение об ошибке, что изображение может быть повреждено или используется формат файла, который Preview не распознает. Когда я открываю изображение с помощью редактирования текста, в запросе передаются идентичные данные base64. Кажется, проблема заключается в том, что salesforce не признает, что файл является изображением и не декодирует данные base64. Все и любая помощь приветствуется! Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Мне никогда не удавалось опубликовать в / ContentVersion / конечную точку. После некоторых исследований самым простым решением, которое я нашел, было использование jsforce https://jsforce.github.io/.

Решение с использованием jsforce:
1. Импортируйте библиотеку jsforce в ваш index.html "https://cdnjs.cloudflare.com/ajax/libs/jsforce/1.7.0/jsforce.min.js"
2. Импортируйте jsforce вверху вашего углового компонента

declare var jsforce:any;
  1. Начать соединение с jsforce

        var conn = new jsforce.Connection({
          loginUrl: "https://test.salesforce.com/",
          clientId : "",
          clientSecret : "",
          redirectUri : ""
        });
        

3. Войдите в SF и отправьте в составную конечную точку, используя requestPost

var username = "";
var password = "";
conn.login(username, password, function(err, userInfo) {
          if (err) { return console.error(err); }
          var path = '/services/data/v41.0';
          return conn.requestPost( path + '/composite/', {
              'allOrNone' : true,
              'compositeRequest' : [
                  {
                      'method' : 'POST',
                      'url' : path + '/sobjects/ContentVersion/',
                      'referenceId' : 'newFile',
                      'body' : {
                          'Title' : fileToPost.name,
                          'PathOnClient' : fileToPost.name,
                          'VersionData' : base64FileData
                      }
                  }
              ]
          })
0 голосов
/ 30 апреля 2018

Я только что попробовал, используя инструментальные средства разработчика, и запрос вроде этого должен работать просто отлично. Старайтесь не определять 2 разных типа содержимого в запросе, вместо этого поместите определение файла в атрибут VersionData объекта ContentVersion

{  
  "PathOnClient" : "IMG_0400.jpg",
  "Title": "IMG_0400.jpg",
  "VersionData" : "4AAQSkZJRgABAQAAAQABAAD/4QBsRXhpZgAASUkqAAgA"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...