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图片太 ...
随机推荐
- 自学_HTML<一>
HTML HTML(HyperText Markup Language):描述网页长什么样子.有什么内容的一个文本.查看网页的描述内容(HTML)的方式:使用IE浏览器的话,在网页上点击右键,选择&q ...
- DDL、DML、TCL
一.DDL 1.创建表(CREATE) (1)数据库对大小写不敏感,只对字符串大小写敏感. (2)使用create关键字创建表.(-- 表示注释). 格式: CREATE TABLE 表名( 字段名1 ...
- UIImageView三种方式 和 位置分布
typedef NS_ENUM(NSInteger, UIViewContentMode) { UIViewContentModeScaleToFill, //为将图片按照整个区域进行拉伸(会破坏图片 ...
- Mac进行Flutter开发的配置
可以参数Flutter中文网提供的方法: https://flutterchina.club/setup-macos/ 使用镜像 由于国内访问Flutter有时会受到限制(博主公司网络自带VPN没有这 ...
- CodeWarrior IDE烧写介绍
点击Flash烧写 选择芯片系列 下面将以PPC8548 NOR Flash烧写为例 默认配置文件目录:C:\Program Files (x86)\Freescale\CodeWarrior PA ...
- css伪类实现行号自动填充
css伪类实现行号自动填充 大多数时候我们需要行号自动填充的时候我们可以 大多数时候是插入元素, 在元素里用js填入行号,或者用 ol > li 实现行号填充, 对于上面的方式,都不太灵活,而且 ...
- Oracle EBS如何查找到说明性弹性域Title
Oracle EBS如何查找到说明性弹性域Title 一.方法一:直接在弹性栏位界面查询 在EBS中,有部分表已经启用说明性弹性域,我们可以直接在界面得到弹性域对话框的标题,如下图所示,在OM-事务处 ...
- react界面跳转,滚动到顶部
在使用react-router-dom时,我们经常会遇到路由切换时滚动到浏览器顶部的问题. 滚动到顶部 Scroll to top 很多时候我们需要的是滚动到顶部“Scroll to top”,因为发 ...
- 201271050130-滕江南-《面向对象程序设计(java)》第十四周学习总结
201271050130-滕江南-<面向对象程序设计(java)>第十四周学习总结 项目 内容 这个作业属于哪个课程 <任课教师博客主页链接> https://www.cnbl ...
- LeetCode 二进制问题
338. Counting Bits(计算小于n的各个数值对应的二进制1的个数) 思路:通过奇偶判断,if i是偶数,a[i]=a[i/2],if i是奇数,a[i]=a[i-1]+1. class ...