如何获取附件的可下载链接?

时间:2014-10-30 14:02:22

标签: salesforce salesforce-service-cloud

我为帐户上传了jpeg图片。 jpeg图像文件ID为069i0000001dkl8,无法访问, https://c.na15.content.force.com/servlet/servlet.FileDownload?file=069i0000001dkl8

但它可以通过, https://c.na15.content.force.com/sfc/servlet.shepherd/version/download/068i0000001hwPn?asPdf=false&operationContext=CHATTER

有没有办法让我可以在salesforce中获取附件的可下载URL(使用api调用)? 或者有没有办法通过处理API对象(SObject)中的某些字段来构建可下载的URL?

感谢。

2 个答案:

答案 0 :(得分:4)

从技术上讲,您正在处理ContentDocument069密钥前缀)和ContentVersion068密钥前缀)记录而不是Attachment({ {3}}密钥前缀)。

查看00P的数据模型:

Content Data Model

您可以使用SOQL创建一个查询,该查询将为ContentDocument提供正确的ContentVersion。然后,可以使用生成的ID创建下载URL。

或者,您可以直接通过API从ContentVersion获取附件的二进制内容。

顺便提一下,Content Objects网站是询问Salesforce特定问题的好地方。

答案 1 :(得分:4)

在冬季,15 Salesforce使这成为可能。您可以创建一个将附件转换为ContentVersionContentDistribution的类。然后向用户传递ContentDistribution的DistributionPublicUrl字段。

代码将是这样的

            list<Attachment> invoices = [select id, name, body from attachment limit 10];
            list<ContentVersion> contents = new list<ContentVersion>();
            list<ContentDistribution> dists = new list<ContentDistribution>();

            for(Attachment inv: invoices){
                ContentVersion cont = new ContentVersion();
                cont.Title = inv.Name;
                cont.PathOnClient =  inv.Name;
                cont.VersionData = inv.Body;
                contents.add(cont);
            }
            insert contents;

            for(ContentVersion cont : contents){
                ContentDistribution cd = new ContentDistribution();
                cd.name = cont.Title;
                cd.ContentVersionId = cont.id;
                cd.PreferencesAllowOriginalDownload = true;
                cd.PreferencesAllowPDFDownload = true;
                cd.PreferencesAllowViewInBrowser = true;
                dists.add(cd); 
            }             

            insert dists ;