文件服务.二开案例.二开插件方式从币别单据上传、下载附件

本案例将演示应用服务器上如何通过二开插件,往币别单据上上传下载附件。
1、上传:
1.1、封装分块文件流,通过调用文件上传接口将文件流上传至当前启用的文件服务实例,返回FileId文件编码等信息。
1.2、遍历文件流,不断读取上传,直到文件流分块上传完毕。
1.3、传入FileId文件编辑及相关文件信息,通过保存接口,保存附件与单据的关联信息进到附件信息表格。
1.4、注意:通过此方式上传附件并不会更新附件数,需自行更新,单据无附件数字段可忽略此提醒。
2、下载附件至应用服务器本地:
2.1、传入文件编码、应用服务器保存文件的路径及登录上下文环境,调用文件下载接口,将文件下载到应用服务器本地。
3、 弹出附件下载窗体:
3.1、封装文件下载地址,发送指令给前端提示弹出文件下载窗体。
4、 示例代码如下:
using System;
using System.ComponentModel;
using System.IO;
using System.Web;
using Kingdee.BOS.Core;
using Kingdee.BOS.Core.Bill.PlugIn;
using Kingdee.BOS.Core.Const;
using Kingdee.BOS.Core.DynamicForm.PlugIn.Args;
using Kingdee.BOS.Core.Metadata;
using Kingdee.BOS.FileServer.Core;
using Kingdee.BOS.FileServer.Core.Object;
using Kingdee.BOS.JSON;
using Kingdee.BOS.Orm.DataEntity;
using Kingdee.BOS.ServiceHelper;
using Kingdee.BOS.ServiceHelper.FileServer;
using Kingdee.BOS.Util;
namespace Running.Sample.PlugIn.BusinessPlugIn.Bill
{
[Description("附件上传下载的表单插件示例。"), HotUpdate]
public class P20200427FileServiceEdit : AbstractBillPlugIn
{
public override void ButtonClick(ButtonClickEventArgs e)
{
//上传附件,并保存于单据关联关系。
if (e.Key.EqualsIgnoreCase("Upload"))
{
Upload();
}
//下载文件至应用服务器本地。
if (e.Key.EqualsIgnoreCase("Download"))
{
Download();
}
//弹出下载提示窗,下载文件至客户端本地。
if (e.Key.EqualsIgnoreCase("ShowDownload"))
{
ShowDownload();
}
}
/// <summary>
/// 上传附件,并保存于单据关联关系。
/// </summary>
public void Upload()
{
//上传附件至当前启用的文件服务实例。
string filePath = @"D:\123.txt"; //测试用附件地址。
FileUploadResult uploadResult = UploadAttachment(filePath);
//保存与单据的关联关系,此处以币别为例。
SaveAttachmentData(uploadResult);
}
/// <summary>
/// 上传附件,返回上传结果。
/// </summary>
/// <param name="filePath">应用服务器下测试文件路径。</param>
/// <returns>返回上传结果。</returns>
private FileUploadResult UploadAttachment(string filePath)
{
FileUploadResult uploadResult = new FileUploadResult();
long blockSize = 1024 * 1024; //分块上传大小。
string fileName = Path.GetFileName(filePath);
//获取上传下载服务。
IUpDownloadService service = FileServiceContainer.GetUpDownloadService();
TFileInfo tFile = new TFileInfo()
{
FileId = string.Empty, //文件编码。
FileName = fileName, //文件名。
CTX = this.Context, //登录上下文环境。
};
using (FileStream fsRead = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
if (fsRead.Length <= 0)
{
return uploadResult;
}
int block = Convert.ToInt32(Math.Ceiling((fsRead.Length * 1.0) / blockSize));
for (int i = 0; i < block; i++)
{
byte[] content = new byte[blockSize];
int size = fsRead.Read(content, 0, content.Length);
if (size == 0)
{
break;
}
tFile.Last = i == block - 1;
tFile.Stream = new MemoryStream(content, 0, size);
uploadResult = service.UploadAttachment(tFile);
_fileId = tFile.FileId = uploadResult.FileId;
if (!uploadResult.Success || tFile.Last)
{
break;
}
}
}
return uploadResult;
}
private void SaveAttachmentData(FileUploadResult uploadResult)
{
//构建附件明细实体数据包。
FormMetadata meta = FormMetaDataCache.GetCachedFormMetaData(this.Context, FormIdConst.BOS_Attachment);
DynamicObject dynObj = new DynamicObject(meta.BusinessInfo.GetDynamicObjectType());
dynObj["BillType"] = "BD_Currency"; //业务单据唯一标识:此处关联币别。
dynObj["InterID"] = 1; //业务单据内码:此处上传至人民币,内码为1。
dynObj["BillNo"] = "PRE001"; //业务单据编码:此处上传文件服务.二开案例.二开插件方式从币别单据上传、下载附件
本案例将演示应用服务器上如何通过二开插件,往币别单据上上传下载附件。1、上传:1.1、封装分块文件流,通过调用文件上传接口将文件流上传...
点击下载文档文档为doc格式
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
上一篇
已经是第一篇



