关于附件下载,如何获取附件相对路径
金蝶云社区-简单简单
简单简单
0人赞赏了该文章 2,025次浏览 未经作者许可,禁止转载编辑于2016年06月27日 18:47:16

大家好!
由于我司K3Cloud存在两台服务器,但只存在一台文件服务器。
比如A服务器存在文件服务器H盘,B服务器不存在文件服务器H盘。
这时附件上传或默认上传到A服务器的文件服务器H盘中(不管连接A服务器或B服务器都能正常上传到A服务器 H盘中)。

这里我需要做下载功能,由于我司要求下载前必须对附件进行加密,所以不能直接调用:
private void DownloadFileFromFileServer(DynamicObject dyn)
{
JSONArray param = new JSONArray();
JSONObject item = new JSONObject();
string fileServerUrl = this.GetFileServerUrl();
if (fileServerUrl.IsNullOrEmptyOrWhiteSpace())
{
throw new KDBusinessException("", ResManager.LoadKDString("该文件需要从文件服务器下载,但是系统没有提供文件服务器配置信息。", "002011030027231", SubSystemType.BOS, new object[0]));
}
if (!fileServerUrl.EndsWith("/"))
{
fileServerUrl = fileServerUrl + "/";
}
string str = string.Format("{0}download.aspx?fileId={1}&dbId={2}&t={3}", new object[] { fileServerUrl, dyn["FileId"].ToString(), base.Context.DBId, DateTime.Now.Ticks });
item.Put("url", HttpUtility.UrlEncode(str));
item.Put("title", ResManager.LoadKDString("文件下载-", "002011010000511", SubSystemType.BOS, new object[0]));
item.Put("desc", ResManager.LoadKDString("请点击打开附件:", "002011030004354", SubSystemType.BOS, new object[0]));
item.Put("urltitle", dyn["AttachmentName"].ToString());
param.Add(item);
this.View.AddAction("openUrlWindow", param);
}

这个方法进行下载!!!!!

以下是我下载的方法:
string fileServerUrl = this.GetFileServerUrl(thisView.Context);
if (fileServerUrl.IsNullOrEmptyOrWhiteSpace())
{
throw new KDBusinessException("", ResManager.LoadKDString("该文档需要从文件服务器下载,但是系统没有提供文件服务器配置信息。", "002011030027231", SubSystemType.BOS, new object[0]));
}
string sql = string.Format("SELECT * FROM T_BAS_FILESERVERFILEINFO WHERE FFILEID = '{0}'", dyn["FILEID"].ToString());
DataRow row = DBServiceHelper.ExecuteDataSet(thisView.Context, sql).Tables[0].Rows[0];
if (row == null)
{
thisView.ShowErrMessage("获取文档详细信息失败,请联系管理员!");
return;
}
//判断原文档是否存在
if (!File.Exists(row["FLOCATIONPATH"].ToString()))
{
thisView.ShowErrMessage("文档不存在,请联系管理员!");
return;
}
//拼接加密后的路径,判断文档如果存在则删除
string newFileName2 = string.Format(KeyConst.FILEUPLOADSERVICES_PATH + @"/" + dyn["ATTACHMENTNAME"].ToString().Replace("#", "#"));
string newFileName = string.Format(@"{0}{1}", Kingdee.BOS.Util.PathUtils.GetPhysicalPath(""), newFileName2);
if (File.Exists(newFileName))
{
File.Delete(newFileName);
}
//把文档移动到指定目录
File.Copy(row["FLOCATIONPATH"].ToString(), newFileName);
//进行加密
if (IsFileJM(dyn["EXTNAME"].ToString(), thisView.Context))
{
juncccEncryptFile(newFileName);
}
//进行文件的下载
var dynamicFormShowParameter = new DynamicFormShowParameter()
{
FormId = "BOS_FileDownLoad"
};
dynamicFormShowParameter.OpenStyle.ShowType = ShowType.Modal;
dynamicFormShowParameter.CustomParams.Add("url", newFileName2);
dynamicFormShowParameter.CustomParams.Add("linktext", ResManager.LoadKDString("右键另存为进行下载", "002014030028722", SubSystemType.BOS, new object[0]));
thisView.ShowForm(dynamicFormShowParameter);

请注意红色这句代码,因为这里我使用了绝对路径的方式
如:H:\K3CloudFile\Video\2016\0008657313ad4deb9c0755071035fed9.wav

这样的实现方法,会碰到一个问题,在A服务器可以正常使用,因为他存在H盘,但是在B服务器不能使用,因为不存在H盘。
我想提问的是,如何获取附件在文件服务器中的相对路径?谢谢!
我不知道我这样描述是否清楚,如果不清楚,可以加我QQ 244016731 谢谢!

您的鼓励与嘉奖将成为创作者们前进的动力,如果觉得本文还不错,可以给予作者创作打赏哦!

请选择打赏金币数 *

10金币20金币30金币40金币50金币60金币
可用金币: 0