zoukankan      html  css  js  c++  java
  • 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;
    }

  • 相关阅读:
    bzoj1934 Vote 善意的投票 最小割(最大匹配)
    poj3417 Network 树上差分+LCA
    bzoj1076 奖励关 期望dp
    bzoj1087 互不侵犯King 状压dp+bitset
    bzoj1041 圆上的整点 数学
    bzoj 1085骑士精神 迭代深搜
    CodeForces 1043D Mysterious Crime 区间合并
    2018.12.14 浪在ACM 集训队第九次测试赛
    2018.12.9 中国石油大学第四次新生训练赛题解
    2018.12.8 中国石油大学第三次新生训练赛题解
  • 原文地址:https://www.cnblogs.com/wutongyu888/p/wutongyu888.html
Copyright © 2011-2022 走看看