3

我为一个帐户上传了 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?

谢谢。

4

2 回答 2

5

在冬天,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 ;
于 2015-07-06T01:27:51.423 回答
4

从技术上讲,您正在处理ContentDocument069键前缀)和ContentVersion068键前缀)记录,而不是Attachment00P键前缀)。

查看内容对象的数据模型:

内容数据模型

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

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

顺便说一句,Salesforce Stackexchange网站是询问 Salesforce 特定问题的好地方。

于 2014-10-30T23:01:08.380 回答