Salesforce では、Content Delivery オブジェクトを使用してこれを非常に効果的に処理できます。API 名: ContentDistribution
ファイルを公開するには、それぞれの ContentVersion ID へのリンクを含む ContentDistribution オブジェクトにレコードを作成するだけです。
ContentDistribution タイプのレコードを作成すると、自動的に入力されるフィールドが 2 つあります。DistributionPublicUrl と ContentDownloadUrl。
これらのフィールドには両方とも、ファイルをパブリック リソースとして公開するための URL が含まれています。何が違うのかと思ったら…
DistributionPublicUrl には、コンテナ内でプレビューできる共有ファイルの URL が含まれています。そしてそれは次のようになります:
この URL を使用すると、ファイルをプレビューしてダウンロードできます。ただし、これを img タグで使用してイメージ タイプのファイルをプレビューする場合は機能しません。
では、どうやってそれを機能させるのでしょうか?
ContentDownloadUrl フィールドに対応します。
ContentDownloadUrl には、ファイルを直接ダウンロードできる共有ファイルの URL が含まれています。そして、この URL を img タグ内でソース (src) として使用して、ファイルを表示することができます。
さらにすごいのは、ContentDistribution オブジェクトが、ViewCount、FirstViewDate、LastViewDate など、他の便利なものも追跡していることです。共有ファイルをパスワードで保護することもできます。
また、ファイルが公開されているさまざまな場所に基づいて統計を追跡したい場合は、同じファイルに対して複数の ContentDistribution レコードを作成します。
このオブジェクトを使って実行できることは他にもたくさんあります。ここを確認してください。
ContentDistribution オブジェクト レコードを作成するにはどうすればよいですか?
これを行うには、ファイルページ、Apex、またはフローの「パブリックリンク」クイックアクションを使用できます。
パブリック リンクの使用 クイック アクション:
リンクが生成されると、バックグラウンドで ContentDistribution オブジェクト レコードが作成されます。
注: 生成されるリンクは DistributionPublicUrl です 。したがって、「ソース」URL として使用したい場合は、ContentDownloadUrl を個別にクエリする必要があります。
Apex の使用:
/* Getting ContentVersion file using ContentDocument Id */
ContentVersion file = [SELECT Id, Title FROM ContentVersion WHERE ContentDocumentId = '<Content Document ID>'].Id;
/* Creating ContentDistribution record */
insert new ContentDistribution(
Name = file.Title,
ContentVersionId = file.Id,
PreferencesAllowViewInBrowser= true
);
フローの使用:
補足: ContentAsset(Asset files) を使用してファイルをパブリック リソースとして公開することもできますが、これはこのアプローチよりも少し複雑です。