当前位置: 移动技术网 > IT编程>开发语言>.net > C# WebAPI 文件在线预览

C# WebAPI 文件在线预览

2019年11月06日  | 移动技术网IT编程  | 我要评论

oohope,昌雅妮,美色小姿

最近在写一个移动端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;
}

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网