asp.net上传图片按照日期自动生成文件夹保存问题

时间:2021-10-13 12:26:47
 /// <summary>
        /// 检测指定的文件夹是否存在,不存在就创建
        /// </summary>
        /// <param name="imgpath">该文件夹的之前的路径,注意一定要带上"/"</param>
        /// <returns></returns>
        public static string CheckFile(string imgpath)
        {
           
            //命名一个今天的文件夹
            string folder = DateTime.Now.ToString("yyyyMMdd");

            //判断文件是否存在
            if (!System.IO.Directory.Exists("uploadpic/images/" + folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory("uploadpic/images/" + folder);

                //生成后返回文件夹名
                return "uploadpic/images/" + folder;
            }

            //如果存在,直接返回今天的文件夹名
            return "uploadpic/images/" + folder;
        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="FileUpload1">上传控件</param>
        /// <param name="i">图片ID</param>
        /// <returns></returns>
        public static string uploadpic(FileUpload FileUpload1, int i)
        {

            string filetype = FileUpload1.PostedFile.ContentType;
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize <= 0)
            {
                return "0";
            }
            if (filesize > 1000000)
            {
                return "00";
            }
            if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
            {
                return "000000";
            }
            string fname = FileUpload1.PostedFile.FileName;

            //获取图片的后缀名

            fname = fname.Substring(fname.IndexOf('.'), fname.Length - fname.IndexOf('.'));

            //给图片命名
            string pic = DateTime.Now.ToString("yyyyMMddHHmmss");

            //图片全名组合
            fname = pic + ".jpg";

            //指定上一级路径

          //string path1 = System.Web.HttpContext.Current.Server.MapPath("/uploadpic/images/");

            string path1 = "uploadpic/images/";

            //调用文件夹检测方法,返回组合路径,且与图片组合成完整路径
            path1 = CheckFile(path1) + "/" + fname;

            //path1 = path1 + "/" + fname;

            FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));

           // FileUpload1.SaveAs(path1);

            return path1;

        }

44 个解决方案

#1


遇到什么问题了?还是例子。。。

#2


你都必须使用Server.MapPath("uploadpic/images/" + folder)

转换成物理路径才可以的

#3


string path1 = "uploadpic/images/";

  //调用文件夹检测方法,返回组合路径,且与图片组合成完整路径
  path1 = CheckFile(path1) + "/" + fname;


你这参数传的不是重复了吗

#4


  public string CheckFile()
  {
    //命名一个今天的文件夹
    string p = DateTime.Now.ToString("yyyyMMdd");
    String folder = Server.MapPath("~/uploadpic/images/" + p + "/");

    //判断文件是否存在
    if (!System.IO.Directory.Exists(folder))
    {
      //自动生成文件夹
      System.IO.Directory.CreateDirectory(folder);
    }
    //生成后返回文件夹名
    return "uploadpic/images/" + p ;
  }


//保存代码

string fname = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
//给图片命名
string pic = DateTime.Now.ToString("yyyyMMddHHmmss");
//图片全名组合
fname = pic + "." + fname;
String path1 = CheckFile() + "/" + fname;
FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("~/" + path1));

#5


4楼的大哥,你那个String path1 = CheckFile() + "/" + fname;“CheckFile”方法参数重载 呀!

#6


1楼的大哥我那个不是例子,而就是我现在上传图片写的一个封装类!我现在的问题是上传图片之后要保存在当天自动生成的文件夹里面!现在就是文件夹自动生成了,但是图片显示读取的路径不对!

#7


我需要保存到数据库中的路径是:uploadpic/images/20110922103209.jpg,读出来时的路径是:http://localhost:46193/uploadpic/images/20110922103209.jpg!这就是我要的效果,现在遇到的问题是保存到数据库中的路径成了这样:F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg!
读出来时变成了:http://localhost:46193/F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg


我现在要在我上面的代码里怎么修改去掉:F:/feng/Cgift/WebSite/这个呢?

#8


保存到数据库的是虚苡路径  上传的物理路径
img.ImageUrl=Server.MapPath(数据库路径)

而LZ你上传的路径也就是可以这个写../../xx/xx.jpg

#9


string fileName = "图片的绝对路径也就是http://localhost:46193.....";
fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);
string path = Server.MapPath(@"/Images/Upload/" + fileName);//Images和Upload根据你的文件夹名来取名
img.ImageUrl=path;

#10


大哥们帮帮忙呀,还是没有解决掉呀!

#11


 path1 = CheckFile(path1) + "/" + fname;

这个看你的程序应该不会返回物理路径的。

string path1 = System.Web.HttpContext.Current.Server.MapPath("/uploadpic/images/");

这样处理才会返回物理路径。

请看看代码是否是重新编译了,以及写出来的代码是不是和你想的一样。

#12


引用 10 楼 zhangshaoyou 的回复:
大哥们帮帮忙呀,还是没有解决掉呀!

LZ我给你的方法是对的
string fileName = "图片的绝对路径也就是http://localhost:46193.....";
fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);//获取到xx.jpg LZ可以根据需要获取你需要的图片名字啊
string path = Server.MapPath(@"/Images/Upload/" + fileName);//Images和Upload根据你的文件夹名来取名
img.ImageUrl=path;

fileName就是你要保存到数据库的图片名字 

上传的也是根据这个方式来的

#13


11楼的大哥你能根据我贴出来的代码在那上面给我作修改吗?我是个菜鸟不怎么懂,麻烦你,谢谢!我会加分的!

#14


你要分清楚前台绑定时是要相对路径virpath,并不是要的你通过Server.MapPath转换后的路径,把图片存到服务器的路径是要物理路径path1,也就是你现在存的F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg,因此你存到数据库中的路径应该是相对路径virpath,也就是你的"/uploadpic/images/+时间"

#15


14楼的大哥那你能根据我贴的代码给我改改吗?加分

#16


你方法参数重载什么啊。?参数不是给你去掉了吗

#17


去掉了就报错呀,没有采用0个方法重载

#18


其实就3句关键的语句

得到保存的物理地址
string p = DateTime.Now.ToString("yyyyMMdd");
String folder = Server.MapPath("~/uploadpic/images/" + p + "/");

folder + 文件名就是了。

得到保存后的url地址

String url =  Page.ResolveUrl("~/") + uploadpic/images/" + p + "/" + 文件名

#19


本帖最后由 net_lover 于 2011-09-29 10:10:41 编辑
你看到
public static  string CheckFile()
定义了吗》
这里有参数吗

#20


获取当前时间,然后创建该文件夹,再传图片上去就O了!

#21


【孟子E章】大哥像你说的那样还是对的呀,我把代码贴给你看看
/// <summary>
        /// 检测指定的文件夹是否存在,不存在就创建
        /// </summary>
        /// <param name="imgpath">该文件夹的之前的路径,注意一定要带上"/"</param>
        /// <returns></returns>
        public static string CheckFile()
        {

            //命名一个今天的文件夹
            

            string p = DateTime.Now.ToString("yyyyMMdd");

            String folder = System.Web.HttpContext.Current.Server.MapPath("/uploadpic/images/" + p);


            //判断文件是否存在
            if (!System.IO.Directory.Exists(folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory(folder);

                //生成后返回文件夹名
                return folder;
            }

            //如果存在,直接返回今天的文件夹名
          return "uploadpic/images/" + p ;

        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="FileUpload1">上传控件</param>
        /// <param name="i">图片ID</param>
        /// <returns></returns>
        public static string uploadpic(FileUpload FileUpload1, int i)
        {

            string filetype = FileUpload1.PostedFile.ContentType;
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize <= 0)
            {
                return "0";
            }
            if (filesize > 1000000)
            {
                return "00";
            }
            if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
            {
                return "000000";
            }
            string fname = FileUpload1.PostedFile.FileName;

            //获取图片的后缀名

            fname = fname.Substring(fname.IndexOf('.'), fname.Length - fname.IndexOf('.'));

            //给图片命名
            string pic = DateTime.Now.ToString("yyyyMMddHHmmss");

            //图片全名组合
            fname = pic + ".jpg";

            String path1 = CheckFile() + "\\" + fname;

            FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/" + path1));

            FileUpload1.SaveAs(path1);

         
            return path1;

        }

#22


【孟子E章】大哥你QQ多少?我加你

#23


你现在的问题是啥?
没有生成路径?
还是没有上传成功?

#24


你这2次返回的东西都不一样的,一个是物理路径,一个是虚拟路径
//判断文件是否存在
            if (!System.IO.Directory.Exists(folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory(folder);

                //生成后返回文件夹名
                 return folder;
            }

            //如果存在,直接返回今天的文件夹名
           return "uploadpic/images/" + p ;

#25


本帖最后由 net_lover 于 2011-09-29 11:35:12 编辑
给你写个完整的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///UploadfileUtil 的摘要说明
/// </summary>
public static class UploadfileUtil
{
  public static string CheckFile()
  {
    //命名一个今天的文件夹
    string p = DateTime.Now.ToString("yyyyMMdd");
    String folder = System.Web.HttpContext.Current.Server.MapPath("~/uploadpic/images/" + p);

    //判断文件是否存在
    if (!System.IO.Directory.Exists(folder))
    {
      //自动生成文件夹
      System.IO.Directory.CreateDirectory(folder);
    }
    return "uploadpic/images/" + p + "/";
  }

  public static string uploadpic(System.Web.UI.WebControls.FileUpload FileUpload1, int i)
  {
    string filetype = FileUpload1.PostedFile.ContentType;
    int filesize = FileUpload1.PostedFile.ContentLength;
    if (filesize <= 0)
    {
      return "0";
    }
    if (filesize > 1000000)
    {
      return "00";
    }
    if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
    {
      return "000000";
    }
    string fname = FileUpload1.PostedFile.FileName;

    //获取图片的后缀名
    if (System.IO.Path.HasExtension(fname))
    {
      fname = System.IO.Path.GetExtension(fname);
    }
    else
    {
      fname = "";
    }
    //给图片命名
    string pic = DateTime.Now.ToString("yyyyMMddHHmmss");
    //图片全名组合
    fname = pic + fname;
    String path1 =  CheckFile() + fname;
    FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("~/" + path1));
    //返回完整的url
    return VirtualPathUtility.ToAbsolute("~/") + path1;
  }
}


调用
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  protected void Button1_Click(object sender, EventArgs e)
  {
    String p = UploadfileUtil.uploadpic(FileUpload1, 0);
    if (p.StartsWith("/"))
      Image1.ImageUrl =p;
    else
    { 
    //错误处理
    }
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
  <asp:FileUpload ID="FileUpload1" runat="server" />
  <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
  <asp:Image ID="Image1" runat="server" />
  </form>
</body>
</html>

#26


我现在遇到的问题就是上传是报错,报的错误是:F:\feng\Cgift\WebSite\uploadpic\images\20110929/20110929113459.jpg”不是有效的虚拟路径。

我是按照你给的代码来做的

#27


拷贝我的类测试

#28


F:\feng\Cgift\WebSite\uploadpic\images\20110929/20110929113459.jpg

你的路径\/都有 啊

#29


我现在全是用的你给的,报的错误是:未能找到路径“F:\feng\Cgift\WebSite\admin\uploadpic\images\20110929\20110929114044.jpg”的一部分。 

#30


本帖最后由 net_lover 于 2011-09-29 12:50:25 编辑
你这些
F:\feng\Cgift\WebSite\admin\uploadpic\images
路径都存在吗?

我怎么测试是可以的啊?

#31


引用 29 楼 zhangshaoyou 的回复:
我现在全是用的你给的,报的错误是:未能找到路径“F:\feng\Cgift\WebSite\admin\uploadpic\images\20110929\20110929114044.jpg”的一部分。


某些路径不存在吧

#32


现在代码是这样的
 public static string CheckFile()
        {

            //命名一个今天的文件夹
            

            string p = DateTime.Now.ToString("yyyyMMdd");

            String folder = System.Web.HttpContext.Current.Server.MapPath("~/uploadpic/images/" + p);


            //判断文件是否存在
            if (!System.IO.Directory.Exists(folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory(folder);

            }

            //如果存在,直接返回今天的文件夹名
            return "uploadpic/images/" + p + "/";

        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="FileUpload1">上传控件</param>
        /// <param name="i">图片ID</param>
        /// <returns></returns>
        public static string uploadpic(FileUpload FileUpload1, int i)
        {

            string filetype = FileUpload1.PostedFile.ContentType;
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize <= 0)
            {
                return "0";
            }
            if (filesize > 1000000)
            {
                return "00";
            }
            if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
            {
                return "000000";
            }

            string fname = FileUpload1.PostedFile.FileName;

           //获取图片的后缀名

            fname = fname.Substring(fname.IndexOf('.'), fname.Length - fname.IndexOf('.'));

            //给图片命名
            string pic = DateTime.Now.ToString("yyyyMMddHHmmss");

            //图片全名组合
            fname = pic + ".jpg";

            string path1 = CheckFile() + fname;

            FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));

            //返回完整的url
            return VirtualPathUtility.ToAbsolute("/" + path1);

        }
,上传倒是成功了,就是前台读取图片路径时读出的是:http://uploadpic/images/20110929/20110929120838.jpg,我要加上本地的才会显示也就是这样的:http://localhost:15003/uploadpic/images/20110922103209.jpg

#33


 //返回完整的url
    return VirtualPathUtility.ToAbsolute("~/") + path1;

代码里面不都是给你转好了吗?

不是让你拷贝测试的吗

#34


你这样写
 FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));
在虚拟目录下可能是错误的

#35


我不想保存到数据库中的路径是:/uploadpic/images/20110929/20110929134503.jpg这样的,我要保存进去的是:uploadpic/images/20110929/20110929134503.jpg这样的,然后在读出来要这样的:http://localhost:15003/uploadpic/images/20110929/20110929134503.jpg

#36


我后台代码是:
 string pic = Cgift.Chinagift.zlw.uploadpic(FileUpload2, 1);
        if (pic == "0")
        {
            pic = HiddenField3.Value.ToString().Trim();

        }
        _cpbs.picbig = pic;

前台代码是:
<tr>
                <td class="style3" align="right">
                    商品大图:
                </td>
                <td>
                    <asp:FileUpload ID="FileUpload2" runat="server" />
                    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
                    <asp:Image ID="Image2" runat="server" Height="50px" Width="50px" />
                    <asp:HiddenField ID="HiddenField3" runat="server" />
                </td>
            </tr>


显示图片:
<asp:TemplateField HeaderText="商品图片 " ShowHeader="False">
                            <ItemTemplate>
                                <img alt="" src="/<%# Eval("picbig") %>" height="50px" width="50px" />
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                        </asp:TemplateField>

#37


<img alt="" src="/<%# Eval("picbig") %>"
这样显示是错误的。
你的程序放在虚拟目录下就是错误的了。

#38


return VirtualPathUtility.ToAbsolute("~/") + path1;

改成
return  path1;
就是
uploadpic/images/20110929/20110929134503.jpg
这样的

#39


非常感谢,终于OK了!

#40


对了【孟子E章】大哥,如果我还想分细呢?就是按照月自动生成文件夹,再在月文件夹里面按照天自动生成文件夹保存呢?比如:201109/20110901/20110901134503.jpg,201109/20110902/20110902134503.jpg,这个怎么实现呀?有分给的!

#41


引用 40 楼 zhangshaoyou 的回复:
对了【孟子E章】大哥,如果我还想分细呢?就是按照月自动生成文件夹,再在月文件夹里面按照天自动生成文件夹保存呢?比如:201109/20110901/20110901134503.jpg,201109/20110902/20110902134503.jpg,这个怎么实现呀?有分给的!


CreateDirectory的问题。

#42


 path1 = CheckFile(path1) + "/" + fname;

  //path1 = path1 + "/" + fname;

  FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));

  // FileUpload1.SaveAs(path1);

  return path1;

=======================================
Server.MapPath("/"+path1));  //这个知道是啥意思不?
你返回

return path1;  //是啥意思。。知道不?
你应该返回
 Server.MapPath("/"+path1));

#43


弄错了。。呵呵 。。

#44


学习了!

#1


遇到什么问题了?还是例子。。。

#2


你都必须使用Server.MapPath("uploadpic/images/" + folder)

转换成物理路径才可以的

#3


string path1 = "uploadpic/images/";

  //调用文件夹检测方法,返回组合路径,且与图片组合成完整路径
  path1 = CheckFile(path1) + "/" + fname;


你这参数传的不是重复了吗

#4


  public string CheckFile()
  {
    //命名一个今天的文件夹
    string p = DateTime.Now.ToString("yyyyMMdd");
    String folder = Server.MapPath("~/uploadpic/images/" + p + "/");

    //判断文件是否存在
    if (!System.IO.Directory.Exists(folder))
    {
      //自动生成文件夹
      System.IO.Directory.CreateDirectory(folder);
    }
    //生成后返回文件夹名
    return "uploadpic/images/" + p ;
  }


//保存代码

string fname = System.IO.Path.GetExtension(FileUpload1.PostedFile.FileName);
//给图片命名
string pic = DateTime.Now.ToString("yyyyMMddHHmmss");
//图片全名组合
fname = pic + "." + fname;
String path1 = CheckFile() + "/" + fname;
FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("~/" + path1));

#5


4楼的大哥,你那个String path1 = CheckFile() + "/" + fname;“CheckFile”方法参数重载 呀!

#6


1楼的大哥我那个不是例子,而就是我现在上传图片写的一个封装类!我现在的问题是上传图片之后要保存在当天自动生成的文件夹里面!现在就是文件夹自动生成了,但是图片显示读取的路径不对!

#7


我需要保存到数据库中的路径是:uploadpic/images/20110922103209.jpg,读出来时的路径是:http://localhost:46193/uploadpic/images/20110922103209.jpg!这就是我要的效果,现在遇到的问题是保存到数据库中的路径成了这样:F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg!
读出来时变成了:http://localhost:46193/F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg


我现在要在我上面的代码里怎么修改去掉:F:/feng/Cgift/WebSite/这个呢?

#8


保存到数据库的是虚苡路径  上传的物理路径
img.ImageUrl=Server.MapPath(数据库路径)

而LZ你上传的路径也就是可以这个写../../xx/xx.jpg

#9


string fileName = "图片的绝对路径也就是http://localhost:46193.....";
fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);
string path = Server.MapPath(@"/Images/Upload/" + fileName);//Images和Upload根据你的文件夹名来取名
img.ImageUrl=path;

#10


大哥们帮帮忙呀,还是没有解决掉呀!

#11


 path1 = CheckFile(path1) + "/" + fname;

这个看你的程序应该不会返回物理路径的。

string path1 = System.Web.HttpContext.Current.Server.MapPath("/uploadpic/images/");

这样处理才会返回物理路径。

请看看代码是否是重新编译了,以及写出来的代码是不是和你想的一样。

#12


引用 10 楼 zhangshaoyou 的回复:
大哥们帮帮忙呀,还是没有解决掉呀!

LZ我给你的方法是对的
string fileName = "图片的绝对路径也就是http://localhost:46193.....";
fileName = fileName.Substring(fileName.LastIndexOf('\\') + 1);//获取到xx.jpg LZ可以根据需要获取你需要的图片名字啊
string path = Server.MapPath(@"/Images/Upload/" + fileName);//Images和Upload根据你的文件夹名来取名
img.ImageUrl=path;

fileName就是你要保存到数据库的图片名字 

上传的也是根据这个方式来的

#13


11楼的大哥你能根据我贴出来的代码在那上面给我作修改吗?我是个菜鸟不怎么懂,麻烦你,谢谢!我会加分的!

#14


你要分清楚前台绑定时是要相对路径virpath,并不是要的你通过Server.MapPath转换后的路径,把图片存到服务器的路径是要物理路径path1,也就是你现在存的F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg,因此你存到数据库中的路径应该是相对路径virpath,也就是你的"/uploadpic/images/+时间"

#15


14楼的大哥那你能根据我贴的代码给我改改吗?加分

#16


你方法参数重载什么啊。?参数不是给你去掉了吗

#17


去掉了就报错呀,没有采用0个方法重载

#18


其实就3句关键的语句

得到保存的物理地址
string p = DateTime.Now.ToString("yyyyMMdd");
String folder = Server.MapPath("~/uploadpic/images/" + p + "/");

folder + 文件名就是了。

得到保存后的url地址

String url =  Page.ResolveUrl("~/") + uploadpic/images/" + p + "/" + 文件名

#19


本帖最后由 net_lover 于 2011-09-29 10:10:41 编辑
你看到
public static  string CheckFile()
定义了吗》
这里有参数吗

#20


获取当前时间,然后创建该文件夹,再传图片上去就O了!

#21


【孟子E章】大哥像你说的那样还是对的呀,我把代码贴给你看看
/// <summary>
        /// 检测指定的文件夹是否存在,不存在就创建
        /// </summary>
        /// <param name="imgpath">该文件夹的之前的路径,注意一定要带上"/"</param>
        /// <returns></returns>
        public static string CheckFile()
        {

            //命名一个今天的文件夹
            

            string p = DateTime.Now.ToString("yyyyMMdd");

            String folder = System.Web.HttpContext.Current.Server.MapPath("/uploadpic/images/" + p);


            //判断文件是否存在
            if (!System.IO.Directory.Exists(folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory(folder);

                //生成后返回文件夹名
                return folder;
            }

            //如果存在,直接返回今天的文件夹名
          return "uploadpic/images/" + p ;

        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="FileUpload1">上传控件</param>
        /// <param name="i">图片ID</param>
        /// <returns></returns>
        public static string uploadpic(FileUpload FileUpload1, int i)
        {

            string filetype = FileUpload1.PostedFile.ContentType;
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize <= 0)
            {
                return "0";
            }
            if (filesize > 1000000)
            {
                return "00";
            }
            if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
            {
                return "000000";
            }
            string fname = FileUpload1.PostedFile.FileName;

            //获取图片的后缀名

            fname = fname.Substring(fname.IndexOf('.'), fname.Length - fname.IndexOf('.'));

            //给图片命名
            string pic = DateTime.Now.ToString("yyyyMMddHHmmss");

            //图片全名组合
            fname = pic + ".jpg";

            String path1 = CheckFile() + "\\" + fname;

            FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/" + path1));

            FileUpload1.SaveAs(path1);

         
            return path1;

        }

#22


【孟子E章】大哥你QQ多少?我加你

#23


你现在的问题是啥?
没有生成路径?
还是没有上传成功?

#24


你这2次返回的东西都不一样的,一个是物理路径,一个是虚拟路径
//判断文件是否存在
            if (!System.IO.Directory.Exists(folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory(folder);

                //生成后返回文件夹名
                 return folder;
            }

            //如果存在,直接返回今天的文件夹名
           return "uploadpic/images/" + p ;

#25


本帖最后由 net_lover 于 2011-09-29 11:35:12 编辑
给你写个完整的例子

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
///UploadfileUtil 的摘要说明
/// </summary>
public static class UploadfileUtil
{
  public static string CheckFile()
  {
    //命名一个今天的文件夹
    string p = DateTime.Now.ToString("yyyyMMdd");
    String folder = System.Web.HttpContext.Current.Server.MapPath("~/uploadpic/images/" + p);

    //判断文件是否存在
    if (!System.IO.Directory.Exists(folder))
    {
      //自动生成文件夹
      System.IO.Directory.CreateDirectory(folder);
    }
    return "uploadpic/images/" + p + "/";
  }

  public static string uploadpic(System.Web.UI.WebControls.FileUpload FileUpload1, int i)
  {
    string filetype = FileUpload1.PostedFile.ContentType;
    int filesize = FileUpload1.PostedFile.ContentLength;
    if (filesize <= 0)
    {
      return "0";
    }
    if (filesize > 1000000)
    {
      return "00";
    }
    if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
    {
      return "000000";
    }
    string fname = FileUpload1.PostedFile.FileName;

    //获取图片的后缀名
    if (System.IO.Path.HasExtension(fname))
    {
      fname = System.IO.Path.GetExtension(fname);
    }
    else
    {
      fname = "";
    }
    //给图片命名
    string pic = DateTime.Now.ToString("yyyyMMddHHmmss");
    //图片全名组合
    fname = pic + fname;
    String path1 =  CheckFile() + fname;
    FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("~/" + path1));
    //返回完整的url
    return VirtualPathUtility.ToAbsolute("~/") + path1;
  }
}


调用
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
  protected void Button1_Click(object sender, EventArgs e)
  {
    String p = UploadfileUtil.uploadpic(FileUpload1, 0);
    if (p.StartsWith("/"))
      Image1.ImageUrl =p;
    else
    { 
    //错误处理
    }
  }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server">
  <asp:FileUpload ID="FileUpload1" runat="server" />
  <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />
  <asp:Image ID="Image1" runat="server" />
  </form>
</body>
</html>

#26


我现在遇到的问题就是上传是报错,报的错误是:F:\feng\Cgift\WebSite\uploadpic\images\20110929/20110929113459.jpg”不是有效的虚拟路径。

我是按照你给的代码来做的

#27


拷贝我的类测试

#28


F:\feng\Cgift\WebSite\uploadpic\images\20110929/20110929113459.jpg

你的路径\/都有 啊

#29


我现在全是用的你给的,报的错误是:未能找到路径“F:\feng\Cgift\WebSite\admin\uploadpic\images\20110929\20110929114044.jpg”的一部分。 

#30


本帖最后由 net_lover 于 2011-09-29 12:50:25 编辑
你这些
F:\feng\Cgift\WebSite\admin\uploadpic\images
路径都存在吗?

我怎么测试是可以的啊?

#31


引用 29 楼 zhangshaoyou 的回复:
我现在全是用的你给的,报的错误是:未能找到路径“F:\feng\Cgift\WebSite\admin\uploadpic\images\20110929\20110929114044.jpg”的一部分。


某些路径不存在吧

#32


现在代码是这样的
 public static string CheckFile()
        {

            //命名一个今天的文件夹
            

            string p = DateTime.Now.ToString("yyyyMMdd");

            String folder = System.Web.HttpContext.Current.Server.MapPath("~/uploadpic/images/" + p);


            //判断文件是否存在
            if (!System.IO.Directory.Exists(folder))
            {
                //自动生成文件夹
                System.IO.Directory.CreateDirectory(folder);

            }

            //如果存在,直接返回今天的文件夹名
            return "uploadpic/images/" + p + "/";

        }

        /// <summary>
        /// 上传图片
        /// </summary>
        /// <param name="FileUpload1">上传控件</param>
        /// <param name="i">图片ID</param>
        /// <returns></returns>
        public static string uploadpic(FileUpload FileUpload1, int i)
        {

            string filetype = FileUpload1.PostedFile.ContentType;
            int filesize = FileUpload1.PostedFile.ContentLength;
            if (filesize <= 0)
            {
                return "0";
            }
            if (filesize > 1000000)
            {
                return "00";
            }
            if (filetype != "image/pjpeg" && filetype != "image/jpeg" && filetype != "image/jpg" && filetype != "image/peg" && filetype != "image/gif" && filetype != "image/x-png" && filetype != "application/x-shockwave-flash")
            {
                return "000000";
            }

            string fname = FileUpload1.PostedFile.FileName;

           //获取图片的后缀名

            fname = fname.Substring(fname.IndexOf('.'), fname.Length - fname.IndexOf('.'));

            //给图片命名
            string pic = DateTime.Now.ToString("yyyyMMddHHmmss");

            //图片全名组合
            fname = pic + ".jpg";

            string path1 = CheckFile() + fname;

            FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));

            //返回完整的url
            return VirtualPathUtility.ToAbsolute("/" + path1);

        }
,上传倒是成功了,就是前台读取图片路径时读出的是:http://uploadpic/images/20110929/20110929120838.jpg,我要加上本地的才会显示也就是这样的:http://localhost:15003/uploadpic/images/20110922103209.jpg

#33


 //返回完整的url
    return VirtualPathUtility.ToAbsolute("~/") + path1;

代码里面不都是给你转好了吗?

不是让你拷贝测试的吗

#34


你这样写
 FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));
在虚拟目录下可能是错误的

#35


我不想保存到数据库中的路径是:/uploadpic/images/20110929/20110929134503.jpg这样的,我要保存进去的是:uploadpic/images/20110929/20110929134503.jpg这样的,然后在读出来要这样的:http://localhost:15003/uploadpic/images/20110929/20110929134503.jpg

#36


我后台代码是:
 string pic = Cgift.Chinagift.zlw.uploadpic(FileUpload2, 1);
        if (pic == "0")
        {
            pic = HiddenField3.Value.ToString().Trim();

        }
        _cpbs.picbig = pic;

前台代码是:
<tr>
                <td class="style3" align="right">
                    商品大图:
                </td>
                <td>
                    <asp:FileUpload ID="FileUpload2" runat="server" />
                    <asp:Label ID="Label2" runat="server" Text="Label"></asp:Label>
                    <asp:Image ID="Image2" runat="server" Height="50px" Width="50px" />
                    <asp:HiddenField ID="HiddenField3" runat="server" />
                </td>
            </tr>


显示图片:
<asp:TemplateField HeaderText="商品图片 " ShowHeader="False">
                            <ItemTemplate>
                                <img alt="" src="/<%# Eval("picbig") %>" height="50px" width="50px" />
                            </ItemTemplate>
                            <ItemStyle HorizontalAlign="Center" VerticalAlign="Middle" />
                        </asp:TemplateField>

#37


<img alt="" src="/<%# Eval("picbig") %>"
这样显示是错误的。
你的程序放在虚拟目录下就是错误的了。

#38


return VirtualPathUtility.ToAbsolute("~/") + path1;

改成
return  path1;
就是
uploadpic/images/20110929/20110929134503.jpg
这样的

#39


非常感谢,终于OK了!

#40


对了【孟子E章】大哥,如果我还想分细呢?就是按照月自动生成文件夹,再在月文件夹里面按照天自动生成文件夹保存呢?比如:201109/20110901/20110901134503.jpg,201109/20110902/20110902134503.jpg,这个怎么实现呀?有分给的!

#41


引用 40 楼 zhangshaoyou 的回复:
对了【孟子E章】大哥,如果我还想分细呢?就是按照月自动生成文件夹,再在月文件夹里面按照天自动生成文件夹保存呢?比如:201109/20110901/20110901134503.jpg,201109/20110902/20110902134503.jpg,这个怎么实现呀?有分给的!


CreateDirectory的问题。

#42


 path1 = CheckFile(path1) + "/" + fname;

  //path1 = path1 + "/" + fname;

  FileUpload1.SaveAs(System.Web.HttpContext.Current.Server.MapPath("/"+path1));

  // FileUpload1.SaveAs(path1);

  return path1;

=======================================
Server.MapPath("/"+path1));  //这个知道是啥意思不?
你返回

return path1;  //是啥意思。。知道不?
你应该返回
 Server.MapPath("/"+path1));

#43


弄错了。。呵呵 。。

#44


学习了!