本人初学.NET,很多不懂,希望多多指教:前端通过<form>提交一张图片:<span class="file2"><input type="file" size="1" maxlength="0" hidefocus="true" ectype="change_avatar" name="picture2" /></span>我想将所提交的图片保存在某目录下,并将该目录存进数据库中。我用HttpPostedFile接收图片,HttpPostedFile PictureContent = (HttpPostedFile)this.Request.Files["picture2"];并用绝对路径保存:PictureContent.SaveAs(PictureFullName);但是一旦采用绝对路径,把网站放在不同的目录下,就要修改“PictureFullName”,很麻烦。问题:用什么类(方法)把它用“相对路径”存起来?如果行的话,也可以不用接收图片的类HttpPostedFile。在网络找半天,也没有找到合适的啊。图片网络数据库.NET

解决方案 »

  1.   


    PictureFullName=Server.MapPath("images")+"\\"+文件名.扩展名
    images为项目中存放上传图片的文件夹相对路径
      

  2.   

    string 相对路径 = PictureFullName.SubString((绝对路径前缀).Length);
      

  3.   

    asp.net网站下的数据文件,应该放在app_data目录下。例如:PictureFullName = Server.MapPath("~/app_data/pics/abc/"+ PictureContent.Name); 
    然后在你的数据库中保存 PictureContent.Name 即可。当asp.net重新部署时,你都是把这个网站迁移,这就包括app_data。不管放到web server的哪一级虚拟目录下(或者根下),这个 PictureFullName 的计算都会正确。
      

  4.   

    这里,应该有一个最基本的概念:在asp.net下的路径,既不是“绝对路径”也不是“相对路径”。只知道这两个概念的人,顶多是知道一些html/javascript路径概念,而不知道asp.net路径概念。在asp.net下,路径是以符号 ~/ 开头并计算出来的。例如var path = this.Page.ResolveUrl("~/abc/def.html");这就是不管这个asp.net网站部署在哪里,都在这个asp.net网站(可能在根,也可能在任何一级虚拟目录下)下的abc子目录下去计算def.html的客户端路径。
      

  5.   

    谢谢,2楼~4楼没有明白我的问题,也许我的表述有问题,不好意思。sp1234虽然回答了,但是好像不是我想要的——我用的是MONORAIL框架,好像没有Page这个东西。目前,我用的是:
      

  6.   

     string Path = HttpRuntime.AppDomainAppPath; 
     string VirtualPath = HttpRuntime.AppDomainAppVirtualPath;
      

  7.   

    现在的问题是:Path和VirtualPath中斜杠方向不一样。