无法在共享文件中上传 blob 中的文件

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

我正在尝试通过 REST API 在 Citrix ShareFile 中上传文件。有四个要求

  1. 获取access_token
  2. 获取文件夹 URI 来决定我要上传哪个文件。
  3. 获取块Uri
  4. 上传该 Uri 块中的文件

前三个步骤非常有效。当我尝试发布对 no 4. 部分的请求时, 它正在 sharefile 中创建一个文件,但大小为 0。

我已经尝试过使用 POSTMAN、表单数据和文件选择,它工作得很好。文件已上传到 sharefile 中。

当我尝试上传 blob 数据时出现问题。 我从 Salesforce Platform 调用此方法,在 Salesforce 中,我无法在物理位置获取物理文件。我有 blob 文件数据存储在 salesforce 数据库中。

下面的部分效果很好。

String fileName_m = 'a12.pdf';  

//  Get Authentication Token

HttpRequest req = new HttpRequest();    

req.setEndpoint('https://{server}.sf-api.com/oauth/token?grant_type=password&client_id={client_id}&client_secret={secret}&username={user_name}&password={password}!');        
req.setMethod('GET');            

Http http = new Http();        
HttpResponse response = http.send(req);                   
System.Debug(response.getBody());


Map<String, Object> results = (Map<String, Object>)JSON.deserializeUntyped(response.getBody());
String token = '';
String refreshtoken = '';
if(response.getStatusCode() == 200){
 token = (String)results.get('access_token');
 refreshtoken = (String)results.get('refresh_token');
}

system.debug('token=' + token);




// Get Folder ID
HttpRequest req1 = new HttpRequest();    

req1.setEndpoint('https://{server}.sf-api.com/sf/v3/Items?$expand=Children');        
req1.setMethod('GET');   
req1.setHeader('Authorization','Bearer ' + token);       

Http http1 = new Http();        
HttpResponse response1 = http1.send(req1);                   
System.Debug(response1.getBody());


Map<String, Object> results1 = (Map<String, Object>)JSON.deserializeUntyped(response1.getBody());
String url = '';
if(response1.getStatusCode() == 200){
 url = (String)results1.get('url');
}

System.Debug('Folder Url ' + url);




// Get Chunk URI    
HttpRequest req2 = new HttpRequest();    

String endPoint = url + '/Upload2'; 
req2.setEndpoint(endPoint);        
req2.setMethod('POST');   
req2.setHeader('Authorization','Bearer ' + token);    
req2.setHeader('Content-Type', 'application/x-www-form-urlencoded');

String payload1 = 'FileName='+fileName_m;    
req2.setBody(payload1);

Http http2 = new Http();        
HttpResponse response2 = http2.send(req2);                   


Map<String, Object> results2 = (Map<String, Object>)JSON.deserializeUntyped(response2.getBody());
String ChunkUri = '';
if(response2.getStatusCode() == 200){
 ChunkUri = (String)results2.get('ChunkUri');
}

System.Debug('ChunkUri' + ChunkUri);

但是,当我尝试在 sharefile 中上传 blob 文件数据时,API 会响应 200 状态代码。在sharefile中,文件被创建了,但是文件的大小为0。

// Problem is here, it is not working
// Upload File
Attachment att = [SELECT Id, Body, Name, ContentType FROM Attachment WHERE Id='00P3p00001XNLOHEA5'];
String body = EncodingUtil.base64Encode(att.body); 



List<Attachment> cvList = [SELECT Id, Body, Name, ContentType FROM Attachment WHERE Id='00P3p00001XNLOHEA5'];

String attachmentBody = EncodingUtil.base64Encode(cvList[0].Body);

Blob pdfBlob = EncodingUtil.base64Decode(attachmentBody);

system.debug('pdfBlob' + pdfBlob);


HttpRequest req3 = new HttpRequest();    
    
    req3.setEndpoint(ChunkUri);        
    req3.setMethod('POST');   
    req3.setHeader('Authorization','Bearer ' + token);   

    req3.setHeader('Content-Length', String.valueOf(attachmentBody.length()));
    req3.setHeader('Content-Encoding', 'UTF-8');
    req3.setHeader('Content-type', 'application/pdf');
    req3.setHeader('Connection', 'keep-alive');
    req3.setBodyAsBlob(pdfBlob);


    Http http3 = new Http();        
    HttpResponse response3 = http3.send(req3);                   
    System.Debug(response3.getBody());

如何解决问题?

salesforce apex citrix sharefile
1个回答
0
投票

您能解决这个问题吗?我也被困在这同一步骤。谢谢!

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