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图片太 ...
随机推荐
- XML的互相序列化对象
using System.Xml.Serialization; using System.IO; using System.Xml; namespace Common { public class X ...
- find命令通过排序只保留最新的文件目录
find /usr/local/canal/logs/example -type d -name "*-*" | sort -nr | awk '{if (NR>=2){pr ...
- 「SAP技术」 SAP MM MPN物料的采购初探
「SAP技术」 SAP MM MPN物料的采购初探 1, MPN物料号与我方正常使用料号物料主数据之间的LINK关系维护 MPN料号 14000005 , 我方料号11000250 , 2,采购信息记 ...
- jQuery-File-Upload $(...).fileupload is not a function $.widget is not a function
使用 jQuery-File-Upload 库的时候碰到了 $(...).fileupload is not a function 和 $.widget is not a function 问题. ...
- 由定时脚本错误以及Elasticsearch配置错误引发的Flink线上事故
近期接手离职同事项目,突然遇到线上事故,Flink无法正常聚合数据生成指标. 以下是详细的排查过程: 问题复现 清晨,运维报告Flink数据分析模块无法正常生成指标数据. 赶紧登陆Flink所在机器, ...
- linux环境下安装selenium+chrom+chromdriver.exe
原文:https://blog.csdn.net/yoyocat915/article/details/80580066 原文:https://blog.csdn.net/hanxue6898/art ...
- nginx的共享字典项api(操作方法)
nginx的共享内存,称为共享字典项,对于所有的worker进程都可见,是一种全局变量. 备注一下内容中的 [] 是 备注. 源码分析文档:https://www.codercto.com/a/948 ...
- 3.Python爬虫入门_正则表达式(简单例子)
#2019-11-23 import requests import time import re #Python正则表达式库 if __name__=='__main__': #海量爬取图片数据 # ...
- C++学习三 模板类出错总结(Missing template arguments before 'L')
一.模板类的说明 模板类有一个好处是可以放宽你输入的数据类型. 比如有这样的一个函数: int add(int x, int y) { return x+y; } 这个函数对于int类型的x,y才适合 ...
- -shared -fPIC
gcc -shared -fPIC -o 1.so 1.c 这里有一个-fPIC参数 PIC就是position independent code PIC使.so文件的代码段变为真正意义上的共享