记一次网站前后台分离后公用文件处理过程

在博客园注册好几年了,但是一直也没有养成写博客的习惯,园龄2年3个月,没有博客,没有粉丝,少有关注,还基本每周都要逛几次,按说也算是个奇葩的超级大水B了吧,哈哈。

         上半年换了工作,在找工作的各种面试过程中,才发现积累的重要性,很多问题在以往的经历中都或多或少经历过,但是大部分都是浅尝辄止,百度出答案,搬上项目上用,能用就用,不能用改改再用,还不行网上找别的方法用。一直这样,几年下来,问题解决不少,但是想想那些是自己会的,真的把网络断了让我封闭式编程,我还能写出多少东西呢,想想就心惊胆战。

         不怕起步晚,就怕不动,最近在忙着做个网站,两周的时间完成网站前后台的基本功能,时间紧,任务重,忙完了之后,在实践的过程在遇到并解决了的其中一个小问题,把解决过程记下来,积累就从这里开始吧。

         问题很简单,网站分前台展示和后台管理。后台管理前台的数据展示,图片展示等等,经过比较,将后台和前台分离,做了两个工程,问题就是后台上传的图片文件,如何在前台的工程中展示。

         想到利用ASP的FileUpload是可以直接将文件上传的文件保存到任意的物理路径下的,想想何不将上传的文件保存到前台工程下的某个文件夹下,供前台直接读取呢。说干就干,

<asp:FileUpload ID="FileUpload1" runat="server" BorderWidth="1px" Width="300px" />

<asp:Button ID="btnUpload" runat="server" Text="上¦?传ä?" OnClick="btnUpload_Click" />
protected void btnUpload_Click(object sender, EventArgs e)

        {

            if (FileUpload1.FileName != null && FileUpload1.FileName.Length > 0)

            {

                string fname = DateTime.Now.ToString("yyMMddHHmmssfff") + FileUpload1.FileName;

                // 文?件t上¦?传ä?

                string fullpath = UploadFiles.Load(FileUpload1, "Images\\NewsSlider\\", fname);

 

                if (fullpath.Length > 0)

                {

                    MessageBox.Show(this, fullpath, false);

                    return;

                }

                else

                {

                    fullpath = "Images/NewsSlider/" + fname;

                    imgQM.ImageUrl = "";

                    imgQM.ImageUrl = "../" + fullpath;

                    imgQM.Visible = true;                }

            }

            else

            {

                MessageBox.Show(this, "未选择文件", false);

                return;

            }

        }

 

public static string Load(FileUpload fileUpload, string directory, string newFileName)

        {

         string path = HttpContext.Current.Request.PhysicalApplicationPath + newdirectory;

 

                string path2 = path.Replace("AgricultureManage", "AgriculturePlatform");

 

                //检¨¬查¨¦目?录?是º?否¤?存ä?在¨²,ê?不?存ä?在¨²则¨°创ä¡ä建¡§目?录?

                CreateDirectory(path);

                CreateDirectory(path2);

         path = path + filename;

                path2 = path2 + filename;

 

                //判D断?文?件t是º?否¤?存ä?在¨²,如¨?果?存ä?在¨²则¨°删¦?除y

                if (File.Exists(path))

                    File.Delete(path);

 

                if (File.Exists(path2))

                    File.Delete(path2);

 

                //保À¡ê存ä?文?件t

                fileUpload.PostedFile.SaveAs(path);

 

                fileUpload.PostedFile.SaveAs(path2);

}

 

这里的path和path2分别是后台和前台的文件夹路径,这样,上传的文件在后台工程和前台工程下分别存了一份(后台图片用来展示缩略图,可不要),同时,将前台相对路径存入DB,至此,后台的工作全部完成,接下来就是前台展示了,打开前台工程,会发现上传的路径下已经存在刚才上传的文件了

 

这些文件虽然没有包含在项目中,但是通过<img src=“”>是可以显示的,只要在DB中取出路径,直接赋值,一切OK,部署到IIS上后,测试OK,后台上传的图片,前台刷新即可展示。

         总结,1.该方法有一定的局限性,我的前后台是部署在同一台服务器上的,所以可以相互上传文件,一旦部署在不同服务器上,非工程文件夹下文件的读取,还要另外讨论,据说要用到文件夹映射和FTP文件服务器,哪位有学习资料和参考知识,欢迎指导。2.由于涉及到文件上传和数据库登录的同步,在文件上传失败,数据库写入失败时候,对数据库的回滚和文件的删除处理必须注意,否则可能造成数据和图片不一致问题。

         第一次写博客,有什么写的不对的,或者有其他好的实现方式,欢迎指正探讨。

posted @ 2014-09-01 14:56  Touphery  阅读(947)  评论(0编辑  收藏  举报