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

zhangshaoyou 2011-09-28 01:53:40
/// <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;

}
...全文
810 44 打赏 收藏 转发到动态 举报
写回复
用AI写文章
44 条回复
切换为时间正序
请发表友善的回复…
发表回复
xingchen189 2011-10-09
  • 打赏
  • 举报
回复
学习了!
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
你这些
F:\feng\Cgift\WebSite\admin\uploadpic\images
路径都存在吗?

我怎么测试是可以的啊?
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
我现在全是用的你给的,报的错误是:未能找到路径“F:\feng\Cgift\WebSite\admin\uploadpic\images\20110929\20110929114044.jpg”的一部分。
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
F:\feng\Cgift\WebSite\uploadpic\images\20110929/20110929113459.jpg

你的路径\/都有 啊
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
拷贝我的类测试
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
我现在遇到的问题就是上传是报错,报的错误是:F:\feng\Cgift\WebSite\uploadpic\images\20110929/20110929113459.jpg”不是有效的虚拟路径。

我是按照你给的代码来做的
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
给你写个完整的例子

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>
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
你这2次返回的东西都不一样的,一个是物理路径,一个是虚拟路径
//判断文件是否存在
if (!System.IO.Directory.Exists(folder))
{
//自动生成文件夹
System.IO.Directory.CreateDirectory(folder);

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

//如果存在,直接返回今天的文件夹名
return "uploadpic/images/" + p ;
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
你现在的问题是啥?
没有生成路径?
还是没有上传成功?
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
【孟子E章】大哥你QQ多少?我加你
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
【孟子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;

}
krenyelang 2011-09-29
  • 打赏
  • 举报
回复
获取当前时间,然后创建该文件夹,再传图片上去就O了!
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
你看到
public static string CheckFile()
定义了吗》
这里有参数吗
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
其实就3句关键的语句

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

folder + 文件名就是了。

得到保存后的url地址

String url = Page.ResolveUrl("~/") + uploadpic/images/" + p + "/" + 文件名
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
去掉了就报错呀,没有采用0个方法重载
孟子E章 2011-09-29
  • 打赏
  • 举报
回复
你方法参数重载什么啊。?参数不是给你去掉了吗
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
14楼的大哥那你能根据我贴的代码给我改改吗?加分
ylfyly 2011-09-29
  • 打赏
  • 举报
回复
你要分清楚前台绑定时是要相对路径virpath,并不是要的你通过Server.MapPath转换后的路径,把图片存到服务器的路径是要物理路径path1,也就是你现在存的F:/feng/Cgift/WebSite/uploadpic/images/20110929/20110929091116.jpg,因此你存到数据库中的路径应该是相对路径virpath,也就是你的"/uploadpic/images/+时间"
zhangshaoyou 2011-09-29
  • 打赏
  • 举报
回复
11楼的大哥你能根据我贴出来的代码在那上面给我作修改吗?我是个菜鸟不怎么懂,麻烦你,谢谢!我会加分的!
萧炎 2011-09-29
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zhangshaoyou 的回复:]
大哥们帮帮忙呀,还是没有解决掉呀!
[/Quote]
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就是你要保存到数据库的图片名字

上传的也是根据这个方式来的
加载更多回复(24)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧