IDOL Просмотр выпуска документа

Я использую API IDOL для преобразования PDF-файла в HTML в классе Salesforce Apex.

Когда я использую простой HTML, как:

<html>
    <body>
        <form action="https://api.idolondemand.com/1/api/sync/viewdocument/v1"
         method="Post" enctype="multipart/form-data">

            <input type="hidden" name="raw_html" value="true"/>
            <input type="hidden" name="apikey" 
             value="{apikey removed}"/>
            <input type='FILE'  name='file'/><br/>
            <input type='submit' name='upload_btn' value='Submit'/> 
        </form>         
    </body>
</html>

тогда это работает. Но когда я использую код APEX httprequest, тогда это делает плохой запрос.

Мой код APEX:

public HTTPResponse uploadFile(Attachment file){ 

        //String boundary = '---------------------\n';
        String header = '\n';               
        header += 'Content-Disposition: form-data; name="file"; filename="'
                    + file.Name +'"\nContent-Type: application/pdf\n\n';             
        String footer = '\n';

        String querybody = '\n Content-Disposition: form-data; 
                                        name="raw_html"\n\n'+true+'\n';
         querybody = querybody + '\n Content-Disposition: form-data; 
                name="apikey"\n\n {apikey removed} \n\n';

      //base64 encoded body
      String bodyEncoded = EncodingUtil.base64Encode(file.body);

      //last encoded body bytes
      String last4Bytes = 
               bodyEncoded.substring(bodyEncoded.length()-4,bodyEncoded.length());
      //if the last 4 bytes encoded base64 ends with the padding character (= 
               or ==) then re-encode those bytes with the footer
      //to ensure the padding is added only at the end of the body
      if(last4Bytes.endsWith('='))
      {
           Blob decoded4Bytes = EncodingUtil.base64Decode(last4Bytes);
           HttpRequest tmp = new HttpRequest();
           tmp.setBodyAsBlob(decoded4Bytes);
           String last4BytesFooter = tmp.getBody()+footer;  
           bodyEncoded = querybody + header + 
                        bodyEncoded.substring(0,bodyEncoded.length()-4) +               
                        EncodingUtil.base64Encode(Blob.valueOf(last4BytesFooter)) +
                            footer;

      }
      else
      {
            bodyEncoded = querybody + header + bodyEncoded + footer;
      }

       bodyEncoded = querybody;// + header + bodyEncoded + footer;
      System.debug('>>>>>>>>>>>>>>>>>>>>>>' + bodyEncoded);        

      HttpRequest req = new HttpRequest();
      req.setHeader('Content-Type','multipart/mixed');
      req.setMethod('POST');

              req.setEndpoint('https://api.idolondemand.com/1/api/sync/viewdocument/v1'
              ); 
      req.setBody(bodyEncoded);
      req.setTimeout(120000);                 
      req.setHeader('Content-Length', String.valueof(req.getBody().length()));
      Http http = new Http();
      Httpresponse res = http.send(req);         
      return res;
    }

Моя страница Visual Force, содержащая только:

<apex:page controller="IDOLService">

  <apex:form >  
    <apex:pageBlock title="File Input">
      <apex:pageBlockSection >
        <apex:pageBlockSectionItem >        
          <apex:inputFile value="{!file.body}" filename="{!file.Name}"/>  
          <apex:commandButton action="{!showPreview}" value="Show Preview"/>          
        </apex:pageBlockSectionItem>
      </apex:pageBlockSection>      
     </apex:pageBlock>

    <apex:outputpanel id="docpanel">
      {!result}
    </apex:outputpanel>  
  </apex:form>
  </apex:page>

Это дает мне ошибку 7005, неверный запрос.

1 ответ

Мы попытались воспроизвести с использованием предоставленного кода, но трудно воспроизвести должным образом без остатка кода контроллера IDOLService, который, по-видимому, был опущен. Мы не пробовали публиковать в http многокомпонентные формы из apex ранее (и взгляд на некоторые другие вопросы показывает, что это не совсем просто), поэтому на сбор рабочего примера уйдет немного времени.

Не могли бы вы прислать дополнительную информацию на idolondemand (at) hp.com, чтобы команда смогла сделать более глубокий обзор?

С Уважением,

hughesthe1st
(Я работаю на HP)

Другие вопросы по тегам