最近在写一个移动端API接口,其中有一个需求:接口返回附件url地址让手机端调用实现文件在线预览。大体实现思路:把doc、xls等文本格式文件转换为pdf,转换后的pdf文件存放在服务器上面,方便第二次调用(目前代码只实现doc和xls文件转换,如大家有什么更好的方案,欢迎大家留言)。

废话不多说,代码如下:

/// <summary>
/// 附件查看接口
/// </summary>
/// <param name="At_ID">附件主键</param>
/// <returns>json</returns>

private string GetFilePreviewMethod(string At_ID)
{
var model = new SendFilePreviewModel();
try
{
var SqlStr = new StringBuilder(@"SELECT * FROM DataTable WHERE At_ID=@At_ID");
SqlParam[] pars = { new SqlParam("@At_ID", At_ID) };
DataTable dt = BaseSql.S().GetDataTable(SqlStr, pars);
if (dt != null && dt.Rows.Count > 0)
{
//源文件相对路径
var SourePathStr = new StringBuilder();
SourePathStr.Append(dt.Rows[0]["F_Url"].ToString());
SourePathStr.Append(dt.Rows[0]["F_RealName"].ToString());
SourePathStr.Append(dt.Rows[0]["F_Type"].ToString());
//PDF文件相对路径
var SavePathStr = new StringBuilder();
SavePathStr.Append(dt.Rows[0]["F_Url"].ToString());
SavePathStr.Append("/PDF/");
SavePathStr.Append(dt.Rows[0]["F_RealName"].ToString());
SavePathStr.Append(".pdf");
if (!File.Exists(HttpContext.Current.Server.MapPath(SourePathStr.ToString())))
{
model.status = "01"; model.msg = "文件不存在";
}
else
{
string path = ""; string error = "";
bool Result =new HelperMethod().OfficeToPdfMethod(dt.Rows[0]["F_Type"].ToString(), SourePathStr.ToString(), SavePathStr.ToString(), ref error, ref path);
if (Result)
{
model.status = "00"; model.msg = "获取成功";
model.url = "http://" + HttpContext.Current.Request.Url.Host + ":" + HttpContext.Current.Request.Url.Port + path;
}
else
{
model.status = "01";model.msg = error;
}
}
}
else { model.status = "01";model.msg = "找不到文件"; }
}
catch (Exception ex)
{
model.status = "01"; model.msg = ex.Message;
TxtLog.WriteLog(ex);
}
return JsonConvert.SerializeObject(model);
}

// <summary>
/// 文件转换为PDF格式方法
/// </summary>
/// <param name="FileType">文件类型</param>
/// <param name="SoursePath">源文件相对路径</param>
/// <param name="SavePath">PDF文件相对路径</param>
/// <param name="error">提示信息</param>
/// <param name="path">返回url相对路径</param>
/// <returns></returns>
public bool OfficeToPdfMethod(string FileType, string SoursePath, string SavePath, ref string error, ref string path)
{
bool Result = true;
if (!File.Exists(Server.MapPath(SavePath)))
{
try
{
var SaveFolder = Server.MapPath(SavePath.Substring(1, SavePath.LastIndexOf('/')));
if (!Directory.Exists(SaveFolder)) { Directory.CreateDirectory(SaveFolder); }
switch (FileType.ToLower())
{
case ".doc":
case ".docx":
Document doc;
doc = new Document(Server.MapPath(SoursePath));
doc.Save(Server.MapPath(SavePath));
path = SavePath;
break;
case ".xls":
case ".xlsx":
Workbook xls;
xls = new Workbook(Server.MapPath(SoursePath));
xls.Save(Server.MapPath(SavePath));
path = SavePath;
break;
default:
path = SoursePath;
break;
}
}
catch (Exception ex) { error = ex.Message; Result = false; }
}
else
{
path = path = SavePath;
}
return Result;
}

最新文章

  1. The first day to learn Englisht
  2. 躲避大龙(codevs 1961)
  3. netstat -an 提示:不是内部或外部命令
  4. python深浅拷贝
  5. Animation用法
  6. IGS_学习笔记09_IREP生成服务后台工具Soagenerate.sh
  7. 【android-cocos2d-X iconv.h】在android下使用iconv
  8. C#垃圾回收机制详解
  9. vmware 网络连接
  10. LocalDateTime返回的是Local时间
  11. 201521123080《Java程序设计》第2周学习总结
  12. struts异常:Caused by: Parent package is not defined: json-default - [unknown location]解决办法
  13. linux上nginx新建站点
  14. Leetcode 992 Subarrays with K Different Integers
  15. 《团队作业》五小福团队作业--UNO-- LandingDay--降落
  16. C#生成唯一订单号
  17. (一 ) 天猫精灵接入Home Assistant-服务器搭建
  18. SVN的常用功能使用教程
  19. 那些年用过的Redis集群架构
  20. 如何启用windows8, windows10中被停用的远程桌面,如何连接windows10远程桌面?

热门文章

  1. 计时 答题 demo
  2. MySQL学习——存储引擎
  3. Java生鲜电商平台-订单架构实战
  4. H265之格式解析
  5. SpringBoot(一):构建第一个SpringBoot工程
  6. CSS3 3D变形 transform---rotateX(), rotateY(), rotateZ(), 透视(perspective)
  7. 3.智能快递柜(通信篇-HTTP)
  8. iOS 唤起APP之URL Scheme
  9. Mysql Join-连接查询(中)
  10. MySQL 部署分布式架构 MyCAT (五)