• FileOperate(个人资料)


     public class FileOperate
        {
            SQLServerDAL.TB_FILE fileSQL = new SQLServerDAL.TB_FILE();
            Entity.TB_FILE fileEntity = new Entity.TB_FILE();//文件实体
            PDFOperate PDFoperate = new PDFOperate();
            private BLL.ManageSys.ftp ftpClient = new ftp();
            private static readonly string WebFileTempStation = WebConfigurationManager.AppSettings["WebFileTempStation"]; //中转站路径
            private static readonly string FtpUri = WebConfigurationManager.AppSettings["FtpUri"];//ftp 地址
        //    private BLL.ManageSys.FileOperate B_File = new BLL.ManageSys.FileOperate();
            /// <summary>
            /// 上传文件,并返回文件在数据库中的存储id,若没有要上传的文件,返回-1
            /// 文件的显示名称为filename
            /// 文件的存储名称为filename(去后缀)+日期(YYYYMMDD)+ 部门编码,如:各种注册码201211271300,
            /// 其中“各种注册码”是去掉后缀文件名称,而20121127是日期,1300是部门编码
            /// 文件路径为完整路径去掉文件名(带后缀的),
            /// 如:D\审计处\
            /// </summary>
            /// <param name="fileUpload">文件上传控件</param>
            /// <param name="strDirectory">相对应用程序所在文件的根目录的路径,
            /// 如:应用程序(页面)所在路径为:E:Projections of xaprojectionsFASMSSSpecialExpense,则根目录为"MSS",若要在MSS下新建文件夹“审计处”
            /// 则应输入"审计处"
            /// 若在根目录下新建多级文件夹,则,格式类似;“审计处\经济责任审核”</param>
            /// <param name="filename">文件名称,如:test.txt</param>
            /// <param name="code">部门编码,若不用可为空</param>
            /// <returns></returns>
            public decimal UploadFile(FileUpload fileUpload, string strDirectory, string fileName ,decimal deptCode )
            {
                if (fileUpload.HasFile)
                {
                    string name = fileUpload.PostedFile.FileName;//获取文件名称
                    int index = fileName.LastIndexOf(".");//filename
                    string lastName = fileName.Substring(index, fileName.Length - index);//文件后缀  包含. 起始位置 如.doc
                    string firstName = fileName.Substring(0, index);//文件除后缀之外的字符串
    
                    string internalName = firstName + DateTime.Now.ToString("yyyyMMddhhmmss") + deptCode.ToString() + lastName;//新文件名 = 文件名+yyyymmdd+部门编码
                    string internalNameWithOutLastname = internalName.Substring(0, internalName.LastIndexOf("."));
    
                    //MapPath("/")获得应用程序根目录所在的位置,如 E:Projections of xaprojectionsFASMSS
                    if (!Directory.Exists(WebFileTempStation  + strDirectory))
                    {
                        Directory.CreateDirectory(WebFileTempStation  + strDirectory);
                    }
                    //上传到中转站 
                    fileUpload.SaveAs(WebFileTempStation  + strDirectory + "\" + internalName);
                   //creat ftp  dir 
                    string []ftpdirs = strDirectory.Split(new char []{'\'});
                    string uri = new Uri(FtpUri).ToString();                
                    foreach (string ftpdir in ftpdirs)
                    {
                        if ("" != ftpdir)
                        {
                            uri += ftpdir + "/";
                        }
                    }
                    if (!ftpClient.DirectoryExist(uri))
                    {
                        Uri UriPath = new Uri(FtpUri + "PartyOrganization(党组织管理系统)/");
                        ftpClient.MakeMutiDir(strDirectory,UriPath);
                    }
                    //上传到ftp
                    ftpClient.UploadFile(WebFileTempStation + strDirectory + "\" + internalName, new Uri(FtpUri+"PartyOrganization(党组织管理系统)/" + strDirectory + ""), 0, WebRequestMethods.Ftp.UploadFile);
                   
    
                    fileEntity.rounte = strDirectory;//相对文件中转站的文件路径,不包括文件名  如  党组织入党申请
                    fileEntity.outerName = fileName;//显示名称  带后缀的
                    fileEntity.internalName = internalName;//内部名称,即存储名称   带后缀的
                    fileEntity.time = DateTime.Now.Date;//日期
                    fileEntity.deptcode = deptCode;//部门编号
                    //ym  上传的时候即转一份pdf 加 水印 
                    if (lastName.ToLower() == ".doc" || lastName.ToLower() == ".docx")
                    {
                        PDFoperate.ConvertWordToPdf(WebFileTempStation  + strDirectory + "\" + internalName, WebFileTempStation + strDirectory + "\" + internalNameWithOutLastname + ".pdf");                   
                    }
                    string pdfFullName = WebFileTempStation + strDirectory + "\" + internalNameWithOutLastname + ".pdf";
                    FileInfo pdffile = new FileInfo(pdfFullName); // 如果存在pdf 则为全路径
                    if (pdffile.Exists)//存在pdf的话加水印
                    {
                        //while (!PDFoperate.CheckFileIsUse(pdfFullName))
                        //{
                        //    System.Threading.Thread.Sleep(10);
                        //}
                        string str = "";
                        PDFoperate.AddTextWaterMark(WebFileTempStation + strDirectory + "\" + internalNameWithOutLastname + ".pdf", ref str, DateTime.Now.ToString());
                        //上传到ftp
                        ftpClient.UploadFile(WebFileTempStation + strDirectory + "\" + internalNameWithOutLastname + ".pdf", new Uri(FtpUri+"PartyOrganization(党组织管理系统)/" + strDirectory + ""), 0, WebRequestMethods.Ftp.UploadFile);
                     
                    }
                    deleteFileMid(strDirectory + "\" + internalName);//delete tempfile
                    deleteFileMid(strDirectory + "\" + internalNameWithOutLastname + ".pdf");//delete temp pdf
                    return fileSQL.Add(fileEntity);
                }
                else
                    return -1;//
            }
            //
            public string getupName(string path)
            {
                return path.Substring(0, path.LastIndexOf(@""));
            }
            /// <summary>
            /// 
            /// </summary>
            /// <param name="fileName">相对中转站本系统根目录路径 如D;Cdangzuzhiddd  后面的   dangzuzhiddd </param>
            public void deleteFileMid(string fileName)
            {
                try
                {
                    System.IO.File.Delete(WebFileTempStation  + fileName);
                }
                catch
                {
     
                }
            }
            /// <summary>
            /// 文件浏览/下载
            /// </summary>
            /// <param name="response">Response对象</param>
            /// <param name="fileId">指定要删除的文件id</param>
            /// <param name="fileName">文件名称,若filename不为空,则下载时显示的文件名称为filename,否则为默认的显示名称</param>
            /// <returns></returns>
            public bool DownLoadFile(HttpResponse response, decimal fileId, string fileName)
            {
                Entity.TB_FILE DownloadEntity = new Entity.TB_FILE();//文件实体
    
                string FullFileName = "";//完整路径  
                string strFilename = "";//显示名称
                string rounte = "";//路径  
    
                DownloadEntity = fileSQL.GetModel(fileId);
                if (DownloadEntity != null)
                {
                    rounte = DownloadEntity.rounte;//文件路径   相对中专站路径
                    if (fileName == "")
                    {
                        fileName = DownloadEntity.outerName;
                    }
                    // 从ftp 下载到 中转站 
                   ftpClient.Download(DownloadEntity.rounte,DownloadEntity.rounte+ @"" + DownloadEntity.internalName,new Uri(FtpUri+"PartyOrganization(党组织管理系统)/"));//
                   ftpClient.Download(DownloadEntity.rounte, DownloadEntity.rounte + @"" + DownloadEntity.internalName.ToString().Substring(0, DownloadEntity.internalName.LastIndexOf(".")) + ".pdf"
                    , new Uri(FtpUri+"PartyOrganization(党组织管理系统)/"));//pdf
            
                    //从中转站下载到本地
                    //ym  下载为pdf 
                    string filenamePDF = fileName.Substring(0, fileName.LastIndexOf(".")) + ".pdf";
                    string pdfName = DownloadEntity.internalName.ToString().Substring(0, DownloadEntity.internalName.LastIndexOf("."))+".pdf";//下载pdf用的。
                    FullFileName = WebFileTempStation+ rounte + "\" + pdfName; //pdf文件的全名  从中转站下载
                    FileInfo DownloadFile = new FileInfo(FullFileName);
    
                    //源文件是非word或pdf的  就下载源文件 
                    string FullFileName2 = WebFileTempStation  + rounte + "\" + DownloadEntity.internalName;
                    FileInfo DownloadFile2 = new FileInfo(FullFileName2);
    
                    if (DownloadFile.Exists) //ym  下载为pdf 
                    {
                        response.Clear();
                        response.ClearHeaders();
                        response.Buffer = false;
                        response.ContentType = "application/octet-stream";
                        strFilename = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(filenamePDF));//ManageSysSystem.Text.Encoding.ASCII
    
                        //strFilename = HttpUtility.UrlEncode(fileName, System.Text.Encoding.ASCII);
                       // response.AddHeader("content-type", "application/x-msdownload");
                        response.AppendHeader("Content-Disposition", "attachment;filename=" + strFilename);//strFilename是保存时要显示的名称
                        response.AppendHeader("Content-Length", DownloadFile.Length.ToString());
                        response.WriteFile(DownloadFile.FullName);
                        response.Flush();
                        // response.End();//我用的时候,加上End()会报异常,所以我给注释掉了
    
    
                        deleteFileMid(rounte + "\" + DownloadEntity.internalName);//delete tempfile
                        deleteFileMid(rounte + "\" + DownloadEntity.internalName.ToString().Substring(0, DownloadEntity.internalName.LastIndexOf(".")) + ".pdf");//delete tempfile pdf
    
                        return true;
                    }
                    else if (DownloadFile2.Exists) //源文件是非word或pdf的  就下载源文件 
                    {
                        response.Clear();
                        response.ClearHeaders();
                        response.Buffer = false;
                        response.ContentType = "application/octet-stream";
                        strFilename = HttpUtility.UrlEncode(System.Text.UTF8Encoding.UTF8.GetBytes(fileName));//ManageSysSystem.Text.Encoding.ASCII
                        //strFilename = HttpUtility.UrlEncode(fileName, System.Text.Encoding.ASCII);
                        //response.AddHeader("content-type", "application/x-msdownload");
                        response.AppendHeader("Content-Disposition", "attachment;filename=" + strFilename);//strFilename是保存时要显示的名称
                        response.AppendHeader("Content-Length", DownloadFile2.Length.ToString());
                        response.WriteFile(DownloadFile2.FullName);
                        response.Flush();
                        // response.End();//我用的时候,加上End()会报异常,所以我给注释掉了
    
    
                        deleteFileMid(rounte + "\" + DownloadEntity.internalName);//delete tempfile
                        deleteFileMid(rounte + "\" + DownloadEntity.internalName.ToString().Substring(0, DownloadEntity.internalName.LastIndexOf(".")) + ".pdf");//delete tempfile pdf
    
                        return true;
                    }
                    else
                    {
                        //文件不存在
                        return false;                    
                    }
                }
                else
                    return false;
            }
    
    
            /// <summary>
            /// 删除服务器上指定的文件
            /// </summary>
            /// <param name="id">指定要删除文件的id</param>
            /// <returns></returns>
            public bool DeleteFile(decimal fileId)
            {
                Entity.TB_FILE DetelefileEntity = new Entity.TB_FILE();//文件实体
                DetelefileEntity = fileSQL.GetModel(fileId);
                if (DetelefileEntity != null)
                {
                    string fileName = DetelefileEntity.rounte + "\" + DetelefileEntity.internalName;
                    try
                    {
                        System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath("/") + fileName);
                        fileSQL.Delete(fileId);//删除数据库中的记录
                        return true;
                    }
                    catch
                    {
                        return false;
                    }
                }
                else
                {
                    return false;//不存在该记录
                }
            }
    
            /// <summary>
            /// 获得File的实体
            /// </summary>
            /// <param name="id"></param>
            /// <returns></returns>
            public Entity.TB_FILE getFileEntity(decimal id)
            {
                return fileSQL.GetModel(id);
            }
    
            /// <summary>
            /// 根据id更新文件
            /// </summary>
            /// <param name="fileUpload"></param>
            /// <param name="id">要更新的文件的id</param>
            /// <returns></returns>
            public bool UpdateFile(FileUpload fileUpload, decimal id)
            {
                fileEntity = fileSQL.GetModel(id);
                if (fileEntity != null && fileUpload.HasFile)
                {
                    string fileName = fileEntity.rounte + "\" + fileEntity.internalName;
                    try
                    {
                        System.IO.File.Delete(System.Web.HttpContext.Current.Server.MapPath("/") + fileName);
    
                        if (!Directory.Exists(System.Web.HttpContext.Current.Server.MapPath("/") + "\" + fileEntity.rounte))
                        {
                            Directory.CreateDirectory(System.Web.HttpContext.Current.Server.MapPath("/") + "\" + fileEntity.rounte);
                        }
                        fileUpload.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/") + "\" + fileEntity.rounte + "\" + fileEntity.internalName);
    
                        return true;
                    }
                    catch
                    {
                        return false;
                    }
                }
                else
                {
                    return false;//不存在该记录
                }
            }
    
        }
    View Code
  • 相关阅读:
    466 你真的了解回流和重绘吗
    465 从一道题浅说 JavaScript 的事件循环
    460 动态组件
    458 MongoDB安装
    457 vue d13
    450 for of 循环
    六种排序算法的Js实现
    你真的理解了比较运算符吗?
    5个有趣且不必要的 JavaScipt 技巧
    7个常见的 JavaScript 测验及解答
  • 原文地址:https://www.cnblogs.com/ymecho/p/3231760.html
Copyright © 2020-2023  润新知