Blob存储文件重命名咨询:无法修改系统方法时的实现方案
实现Blob下载时自定义文件名(不修改原Blob名称)
可行,核心思路是先将Blob内容读取到内存流,再通过File.Download方法指定自定义文件名完成下载,原Blob的标识符(Rec.BlobName)完全保留,不会被修改。
具体实现代码
替换原Download动作的OnAction触发器代码,改为以下逻辑:
area(Processing) { action(Download) { ApplicationArea = All; Caption = 'Download'; Image = Download; trigger OnAction(); var BlobStream: InStream; TargetFileName: Text; begin // 1. 从数据库获取要使用的自定义文件名(替换成你实际的字段名,比如Rec.DocumentName) TargetFileName := Rec.DocumentName; if TargetFileName = '' then Error('未指定下载文件名'); // 2. 通过ABSBlobClient获取Blob的内容流 ABSBlobClient.GetBlobAsStream(Rec.BlobName, BlobStream); if BlobStream.EOS then Error('Blob内容为空'); // 3. 使用File.Download方法,指定自定义文件名完成下载 File.Download(BlobStream, '', '', '', TargetFileName); end; } }
关键逻辑说明
GetBlobAsStream:属于ABSBlobClient的系统方法,和GetBlobAsFile功能同源,只是将Blob内容读取到流对象而非直接触发下载File.Download:Business Central标准方法,支持传入流和自定义文件名,用户下载时会收到指定名称的文件- 原Blob的
Rec.BlobName仅用于定位Blob资源,全程不会被修改,完全满足「Blob保留标识符、下载文件用数据库名称」的需求
内容的提问来源于stack exchange,提问作者Maksio
相关产品推荐
相关产品推荐

