C# WebAPI 文件在线预览
最近在写一个移动端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;
}
C# WebAPI 文件在线预览的更多相关文章
- asp.net word ecxel类型文件在线预览
asp.net word ecxel类型文件在线预览 首先得引用COM: Microsoft Excel 10 Object Library Microsoft Word 10 Object Libr ...
- 使用PDF.JS实现pdf文件在线预览时,报文件被损坏的错误
首先大概说明一下问题出现的背景:我用PDF.JS实现文件在线预览,参考网上的办法,在jsp文件中使用 <iframe src="<c:url value="js/gen ...
- 文件在线预览doc,docx转换pdf(一)
文件在线预览doc,docx转换pdf(一) 1. 前言 文档转换是一个是一块硬骨头,但是也是必不可少的,我们正好做的知识库产品中,也面临着同样的问题,文档转换,精准的全文搜索,知识的转换率,是知识库 ...
- 网页中动态嵌入PDF文件/在线预览PDF内容https://www.cnblogs.com/xgyy/p/6119459.html
#网页中动态嵌入PDF文件/在线预览PDF内容# 摘要:在web开发时我们有时会需要在线预览PDF内容,在线嵌入pdf文件: 问题1:如何网页中嵌入PDF: 在网页中: 常用的几种PDF预览代码片段如 ...
- kkfileview v2.0 发布,文件在线预览项目方案
kkfileview文件在线预览 此项目为文件文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署,部署好后可以独立提供预览服务,使用http接口访问,不需要和应用集成,具 ...
- 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程
大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...
- office文件在线预览,模仿网易邮箱在线预览的
最近研究了半天,代码是倾情奉送啊,C#,asp.net的 这个原理是office文件转换为PDF文件,然后再转换成SWF文件,FlexPaper+swfTools. 有个问题,需要在web.confi ...
- 使用jodconverter和swftools实现文件在线预览
参考:仿百度文库解决方案(四)——利用JODConverter调用OpenOffice.org服务转换文档为PDF 文档在线预览主要用到如下两个工具 1,安装openoffice(同时下载jodcon ...
- 【ASP.NET 进阶】PDF文件在线预览(类似百度文库)
工作需要完成文档的在线预览,现在完成了第一步PDF文件的预览,步骤是通过PDF转换工具pdf2swf.exe把PDF文件转换为SWF文件,然后通过FlexPaper就可以预览了.效果如下(GIF图片太 ...
随机推荐
- vue-基本动画
不使用动画 <div id="app"> <input type="button" value="toggle" @cli ...
- java基础(30):DBUtils、连接池
1. DBUtils 如果只使用JDBC进行开发,我们会发现冗余代码过多,为了简化JDBC开发,本案例我们讲采用apache commons组件一个成员:DBUtils. DBUtils就是JDBC的 ...
- DevExpress的下拉框控件ComboxBoxEdit怎样绑定键值对选项
场景 DevExpress的下拉框控件ComboBoxEdit控件的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1028 ...
- Dynamics CRM 中Web API中的深度创建(Deep Insert)
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Qt之圆角阴影边框
Qt的主窗体要做出类似WIN7那种圆角阴影边框,这一直是美工的需求. 这里是有一些门道的,尤其是,这里藏着一个很大的秘密. 这个秘密是一个QT的至少横跨3个版本,存在了2年多的BUG... https ...
- 环信即时通讯在工程中的安装——Nusen_Liu
即时通讯-环信 准备 1.下载SDK http://www.easemob.com/download 2.证书下载上传 后期发送消息 需要推送发送的内容 http://docs.easemob.com ...
- 【Android】基于A星寻路算法的简单迷宫应用
简介 基于[漫画算法-小灰的算法之旅]上的A星寻路算法,开发的一个Demo.目前实现后退.重新载入.路径提示.地图刷新等功能.没有做太多的性能优化,算是深化对A星寻路算法的理解. 界面预览: 初始化: ...
- MBProgressHUD源码(上)
本篇博文记录MBProgressHUD源码学习过程,从官方提供的Demo项目入手,一步步了解其代码结构,学习它使用的技术,体会作者的编程思想. 一.结构 我们先来看下MBProgressHUD的结构, ...
- Mysql Join-连接查询(中)
Mysql Join-连接查询(中) 认识 就我平时的数据接触来看, 连接查询也没有很复杂,不够是非常需要耐心和逻辑的, 一点点将数据查出来, 拼接等. 没有什么技巧, 多练习就会了. 无非就是表之间 ...
- [Linux] 解决nginx: [emerg] directive "rewrite" is not terminated by ";"
解决nginx: [emerg] directive "rewrite" is not terminated by ";"nginx的rewite规则有时候没注 ...