You can get the list of all form entries from the ExperienceForms Database.
var result = new List<FormEntry>();
var output = dataProvider.GetEntries(formId, startDate, endDate);
if (output != null && output.Any())
result = output.ToList();
for GetEntries, you can use IFormDataProvider interface.
namespace Sitecore.ExperienceForms.Data
{
public interface IFormDataProvider
{
IReadOnlyCollection<FormEntry> GetEntries(
Guid formId,
DateTime? startDate,
DateTime? endDate);
void CreateEntry(FormEntry entry);
void DeleteEntries(Guid formId);
}
}
I've not worked on storage but based on my understanding so far, I think you can create a custom FileStorageProvider class and generate the link field property based on your need -
https://doc.sitecore.com/developers/93/sitecore-experience-manager/en/manage-file-storage-for-forms.html
So the idea is if you have [FormItemID] reference in storage, you can first get the forms, (As mentioned above) and based on [FormItemID] reference you can get the files from the custom repository with the custom property of link.
I hope these details will help.