我为帐户上传了jpeg图片。 jpeg图像文件ID为069i0000001dkl8,无法访问, https://c.na15.content.force.com/servlet/servlet.FileDownload?file=069i0000001dkl8
有没有办法让我可以在salesforce中获取附件的可下载URL(使用api调用)? 或者有没有办法通过处理API对象(SObject)中的某些字段来构建可下载的URL?
感谢。
答案 0 :(得分:4)
从技术上讲,您正在处理ContentDocument(069密钥前缀)和ContentVersion(068密钥前缀)记录而不是Attachment({ {3}}密钥前缀)。
查看00P的数据模型:
您可以使用SOQL创建一个查询,该查询将为ContentDocument提供正确的ContentVersion。然后,可以使用生成的ID创建下载URL。
或者,您可以直接通过API从ContentVersion获取附件的二进制内容。
顺便提一下,Content Objects网站是询问Salesforce特定问题的好地方。
答案 1 :(得分:4)
在冬季,15 Salesforce使这成为可能。您可以创建一个将附件转换为ContentVersion和ContentDistribution的类。然后向用户传递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 ;