FileUpload 控件的用法 这控件没用过,谁有示例学习下吗,现在要用主要是做一个图片上传的功能 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 很简单FileUpload1.PostedFile.SaveAs(path); HttpPostedFile post = this.FileUpload1.PostedFile; //获取文件完整路径,如一张图片的完整路径: E:\Image\程序效果用图\In03.jpg string filePath = post.FileName; if (filePath == "") { Response.Write("<script language=javascript>alert('请选择上传的照片!');location.href = location.href;</script>"); return; } //截取文件名: 从 ( 反斜杠+1的 位置 ) 开始截取!获取文件名, 如: In03.jpg string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1); //返回一个物理路径:用以将客户端文件保存到 Web服务器的images文件夹中 string s = Server.MapPath("images\\photo\\"+ "\\" + fileName); //保存到 Web服务器指定路径 FileUpload1.SaveAs(s); //也可以一步到位 //FileUpload1.SaveAs(Server.MapPath("")); SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["blog"].ToString()); conn.Open(); SqlCommand cmd = new SqlCommand("insert into image(imageurl,name,time,type) values('" + "images\\photo\\" + fileName + "','" + TextBox1.Text + "','" + DateTime.Now.ToString() + "','" + DropDownList1.SelectedValue.ToString() + "')", conn); if (cmd.ExecuteNonQuery() > 0) { Response.Write("<script language=javascript>alert('相片上传成功!');location.href = location.href;</script>"); } else { Response.Write("<script language=javascript>alert('相片上传失败!');location.href = location.href;</script>"); } conn.Close(); http://topic.csdn.net/u/20101013/15/12d1f254-ff5e-4449-bb33-484fa45b5504.html可以去看看这个帖子、我回过详细方法了、呵呵 /// <summary> /// 上传图片 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void btnUpLoad1_Click(object sender, EventArgs e) { //判断是否还有上传文件 if (FileUpload1.HasFile) { //获得上传文件的类型 string FileType = FileUpload1.PostedFile.ContentType; //上传文件类型的过滤 if (FileType == "image/bmp" || FileType == "image/gif" || FileType == "image/pjpeg") { //获得上传文件的名称 string FileName = FileUpload1.PostedFile.FileName; FileInfo file = new FileInfo(FileName); // 文件名称 string fileName = file.Name; //文件上传的路径 webFilePath_sPath2 = "../Files/image/" + fileName; string webFilePath = Server.MapPath("~/Files/image/" + fileName); // 服务器端文件路径 if (!File.Exists(webFilePath)) { try { if (!File.Exists(webFilePath)) { //使用SaveAs保存文件 FileUpload1.SaveAs(webFilePath); lblWaring.Text = "提示:图片" + fileName + "已成功上传!!!"; Image1.ImageUrl = webFilePath_sPath2; } else { lblWaring.Text = "提示:图片已经存在,请重命名后上传"; } } catch (Exception ex) { lblWaring.Text = "提示:图片上传失败,失败原因:" + ex.Message; } } else { lblWaring.Text = "提示:图片已经存在,请重命名后上传"; } } else { lblWaring.Text = "提示:图片类型不符"; } } } 为什么我的这一句话得到的是空哦HttpPostedFile post = this.FileUpload1.PostedFile;这样取也是空值string filePath = this.FileUpload1.PostedFile.FileName; 未能找到路径“E:\MiSha工作\TianAiYuan\WEB-UI\images\QQ截图未命名1.png”的一部分。保存的那个路径是要原本就存在的吗如果我想把名字改下就只要把那个filePath 改掉就行了吧,文件应该是没变的吧 完全使用手册http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.fileupload.aspx FileUpload1打点后有中文介绍,lz试试就知道了...很简单的.. 使用FileUpLoad包进行文件上传。进行文件上传一般有三种方式使用fileUpLoad使用smartFileUpLoad自己编写类似的程序进行解析下面介绍一下第一种方式的使用方法:fileUpLoad是apache的一个开源项目,用来进行解析带有文件的请求处理。著名的struts的FormFile就是用的它进行解析处理的。1首先页面上我们需要将表单设置下面类似的参数:< form method="post" enctype="multipart/form-data" action=”………… ” >2 然后我们需要在工程里导入所需要的包,可以在apache网站上下载:http://jakarta.apache.org/commons/fileupload/3 在我们的servlet中可以获取到request参数,然后可以这样取传递过来的字段参数及文件参数:在这里我写了两个类去生成并存储字段和文件的值:可以跟着红色的注释代码看一下实现的过程/***@authorsxy * *封装了FileUpload类,实现文件上传功能 * */ publicclass FileUploadUtil { privatestatic Logger logger = Logger.getLogger(FileUploadUtil.class); public HttpServletRequest request; //这个是FileUpLoad控件的实际处理的request数据的类对象 DiskFileUpload fu; //用来存储解析后的字段和文件数据 List fileItems; //字段名与字段值的映射 String--Vector HashMap fieldsMap=new HashMap(); //字段名与相对UploadedFile的映射 HashMap filesMap=new HashMap(); /**构造函数,遍历所有字段,分别存入文件MAP和字段MAP *@paramrequest *@paramtempDirectory *@throwsBaseWebException */ //当生成一个类时就开始了对request传递过来的数据的解析 public FileUploadUtil(HttpServletRequest request,String tempDirectory) throws Exception { this.request = request; //这一句很重要,以前我没有加上,结果UTF-8编码时老是出现乱码问题,最后还是看了Struts的文件上传源代码是这样写的,才解决了乱码问题 String encoding=request.getCharacterEncoding();fu = new DiskFileUpload(); fu.setSizeMax(44194304); //设置文件大小. fu.setSizeThreshold(4096); fu.setHeaderEncoding(encoding); fu.setRepositoryPath(tempDirectory); //设置临时目录. try { //解析参数,在后面进行文件字段和普通字段值的进一步处理 fileItems = fu.parseRequest(request); //解析请求,返回一个集合. } catch (FileUploadException e) { thrownew Exception(e); }Iterator i = fileItems.iterator(); //遍历解析好的参数,以区分文件还是普通字段,并作相应的处理(存入不同的hashMap) while(i.hasNext()) {FileItem fi = (FileItem)i.next();//判断当前项是否为普通字段 if(fi.isFormField()) //这是用来确定是否为文件属性, {Vector vec=new Vector(); //需改正 String fieldName = fi.getFieldName(); //这里取得字段名称 //如果已经存在此字段信息(多选列表或多个同名的隐藏域等) if(fieldsMap.get(fieldName)!=null) {vec=(Vector)fieldsMap.get(fieldName); logger.info("value: fi.getString(request.getCharacterEncoding())); //很重要!需要进行编码哦!!! vec.add(fi.getString(request.getCharacterEncoding()));}//第一次取到这个名的字段 else {logger.info("value: "+fi.getString(request.getCharacterEncoding())); vec.add(fi.getString(request.getCharacterEncoding()));fieldsMap.put(fieldName,vec); }}//为文件字段时 else {//传来的文件名不为空时 String fullName=fi.getName();if(fullName!=null&&!("".equals(fullName))) {//这里是一个封装好的类型,封装的不太好,其中的getRealName()不//好用,但是获取扩展名和文件名的方法还是可以的。 UploadedFile uploadedFile=new UploadedFile(fi); filesMap.put(fi.getFieldName(),uploadedFile); }}}}// FileUploadUtil /** *模仿request的getParameter方法,取得非文件的字段 *如果为多个值的,只返回第一个 *@paramparam *@return为空或键值不存在返回null */ public String getParameter(String param) {if(param==null) {returnnull; }else {Vector vec=(Vector)fieldsMap.get(param); if(vec!=null&&vec.size()>0) {return (String)vec.get(0); }elsereturnnull; }}//getParameter public String[] getParameterValues(String param) {String[] values=null; if(param==null) {returnnull; }else {Vector vec=(Vector)this.fieldsMap.get(param); int size=vec.size(); values=new String[size]; if(vec!=null&&vec.size()>0) {for(int i=0;i<size;i++) {values[i]=(String)vec.get(i);}return values; }else {returnnull; }}//else }/** * *返回上传的文件的名称,如若没这个参数名,返回null *@paramparamName *@return */ public String getFileName(String paramName) {if(paramName!=null) {UploadedFile uploadedFile=(UploadedFile)this.filesMap.get(paramName); if(uploadedFile!=null) {return uploadedFile.getRealName(); }}returnnull; }/** *这个方法用来将文件字段保存在硬盘上。 *@paramparamName *@paramnewNameWithoutExt *@paramrelativePath *@throwsBaseWebException */ publicvoid upLoadFile(String paramName,String newNameWithoutExt,String relativePath) throws Exception {if(paramName!=null) {UploadedFile uploadedFile=(UploadedFile)this.filesMap.get(paramName); if(uploadedFile!=null&&uploadedFile.fileItem.getSize()>0) {String path=request.getSession().getServletContext().getRealPath("/"); path+=relativePath+newNameWithoutExt;uploadedFile.write(path);}}}publicstaticvoid main(String[] args) {}public List getFileItems() { returnfileItems; }publicvoid setFileItems(List fileItems) { this.fileItems = fileItems; }public HashMap getFieldsMap() { returnfieldsMap; }publicvoid setFieldsMap(HashMap fieldsMap) { this.fieldsMap = fieldsMap; }public HashMap getFilesMap() { returnfilesMap; }publicvoid setFilesMap(HashMap filesMap) { this.filesMap = filesMap; }public DiskFileUpload getFu() { returnfu; }publicvoid setFu(DiskFileUpload fu) { this.fu = fu; }public HttpServletRequest getRequest() { returnrequest; }publicvoid setRequest(HttpServletRequest request) { this.request = request; }}//辅助的文件封装字段,还很不完善,比如缺少获取文件流的方法,以后考虑创建adapter //来实现封装对象fileItem的一些方法。这里主要提供了获取扩展名和文件名的方法,比较//简陋 publicclass UploadedFile { private String fullName=""; public FileItem fileItem; /** *@paramfileItem */ public UploadedFile(FileItem fileItem) { this.fileItem = fileItem; fullName=fileItem.getName(); }public String getFileNameWithoutExt() {returnnull; }//返回文件的扩展名 public String getExt() { String[] values= fullName.split("\\."); return values[values.length-1]; }//不好用这个方法!! public String getRealName() {String[] values= fullName.split("\\\\\\"); return values[values.length-1]; }publicString getBaseFileName() { // First, ask the JDK for the base file name. String fileName = new File(this.fileItem.getName()).getName(); // Now check for a Windows file name parsed incorrectly. int colonIndex = fileName.indexOf(":"); if (colonIndex == -1) { // Check for a Windows SMB file path. colonIndex = fileName.indexOf("\\\\"); }int backslashIndex = fileName.lastIndexOf("\\"); if (colonIndex > -1 && backslashIndex > -1) { // Consider this filename to be a full Windows path, and parse it // accordingly to retrieve just the base file name. fileName = fileName.substring(backslashIndex + 1);}return fileName; }publicvoid write(String path) throws Exception {try { fileItem.write(new File(path)); } catch (Exception e) { thrownew Exception(e); } }}使用方法就是分的简单了:FileUploadUtil fu;fu = new FileUploadUtil(request,"c:/");String name=fu.getParameter("name");logger.info("字段名; name ,值:"+name);Map fileMap=fu.getFilesMap();UploadedFile ufile=(UploadedFile) fileMap.get("myFile"); this.FileUpload1.PostedFile;单个文件下就执行但是,整合在模块里面了就说这个为空 ASP.NET中如何调用颜色框对话框? asp.net C# Base64转成其他编码格式如何做?会的帮帮忙给个代码。谢谢 弱弱的问一下:为什么我有时候连续刷新几次页面SESSION中保存的值就丢失了? 关于从Excel导出数据 请问大家有没有试过把一个dataset导出到html的?? 权限设置问题,散分!!! 全局变量问题 关于用ASP.net和C#画条形图,饼状图,曲线图的问题 .net的低级问题,求救! 请大家收集一些比较经典的.NET问题,好整理成一个‘新手必读’... web 用户控件 使用问题 如何将status为3的放到最后面
//获取文件完整路径,如一张图片的完整路径: E:\Image\程序效果用图\In03.jpg
string filePath = post.FileName;
if (filePath == "")
{
Response.Write("<script language=javascript>alert('请选择上传的照片!');location.href = location.href;</script>");
return;
}
//截取文件名: 从 ( 反斜杠+1的 位置 ) 开始截取!获取文件名, 如: In03.jpg
string fileName = filePath.Substring(filePath.LastIndexOf("\\") + 1);
//返回一个物理路径:用以将客户端文件保存到 Web服务器的images文件夹中
string s = Server.MapPath("images\\photo\\"+ "\\" + fileName);
//保存到 Web服务器指定路径
FileUpload1.SaveAs(s);
//也可以一步到位
//FileUpload1.SaveAs(Server.MapPath(""));
SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["blog"].ToString());
conn.Open();
SqlCommand cmd = new SqlCommand("insert into image(imageurl,name,time,type) values('" + "images\\photo\\" + fileName + "','" + TextBox1.Text + "','" + DateTime.Now.ToString() + "','" + DropDownList1.SelectedValue.ToString() + "')", conn);
if (cmd.ExecuteNonQuery() > 0)
{
Response.Write("<script language=javascript>alert('相片上传成功!');location.href = location.href;</script>");
}
else
{
Response.Write("<script language=javascript>alert('相片上传失败!');location.href = location.href;</script>");
}
conn.Close();
http://topic.csdn.net/u/20101013/15/12d1f254-ff5e-4449-bb33-484fa45b5504.html
可以去看看这个帖子、我回过详细方法了、呵呵
/// 上传图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void btnUpLoad1_Click(object sender, EventArgs e)
{
//判断是否还有上传文件
if (FileUpload1.HasFile)
{
//获得上传文件的类型
string FileType = FileUpload1.PostedFile.ContentType; //上传文件类型的过滤
if (FileType == "image/bmp" || FileType == "image/gif" || FileType == "image/pjpeg")
{
//获得上传文件的名称
string FileName = FileUpload1.PostedFile.FileName; FileInfo file = new FileInfo(FileName);
// 文件名称
string fileName = file.Name;
//文件上传的路径
webFilePath_sPath2 = "../Files/image/" + fileName;
string webFilePath = Server.MapPath("~/Files/image/" + fileName); // 服务器端文件路径
if (!File.Exists(webFilePath))
{
try
{
if (!File.Exists(webFilePath))
{
//使用SaveAs保存文件
FileUpload1.SaveAs(webFilePath);
lblWaring.Text = "提示:图片" + fileName + "已成功上传!!!";
Image1.ImageUrl = webFilePath_sPath2;
}
else
{
lblWaring.Text = "提示:图片已经存在,请重命名后上传";
}
}
catch (Exception ex)
{
lblWaring.Text = "提示:图片上传失败,失败原因:" + ex.Message;
}
}
else
{
lblWaring.Text = "提示:图片已经存在,请重命名后上传"; }
}
else
{
lblWaring.Text = "提示:图片类型不符";
}
}
}
HttpPostedFile post = this.FileUpload1.PostedFile;
这样取也是空值
string filePath = this.FileUpload1.PostedFile.FileName;
如果我想把名字改下就只要把那个filePath 改掉就行了吧,文件应该是没变的吧
很简单的..
进行文件上传一般有三种方式
使用fileUpLoad
使用smartFileUpLoad
自己编写类似的程序进行解析
下面介绍一下第一种方式的使用方法:
fileUpLoad是apache的一个开源项目,用来进行解析带有文件的请求处理。著名的struts的FormFile就是用的它进行解析处理的。
1首先页面上我们需要将表单设置下面类似的参数:
< form method="post" enctype="multipart/form-data" action=”………… ” >
2 然后我们需要在工程里导入所需要的包,可以在apache网站上下载:
http://jakarta.apache.org/commons/fileupload/
3 在我们的servlet中可以获取到request参数,然后可以这样取传递过来的字段参数及文件参数:
在这里我写了两个类去生成并存储字段和文件的值:
可以跟着红色的注释代码看一下实现的过程
/**
*@authorsxy
*
*封装了FileUpload类,实现文件上传功能
*
*/
publicclass FileUploadUtil {
privatestatic Logger logger = Logger.getLogger(FileUploadUtil.class);
public HttpServletRequest request;
//这个是FileUpLoad控件的实际处理的request数据的类对象
DiskFileUpload fu;
//用来存储解析后的字段和文件数据
List fileItems;
//字段名与字段值的映射 String--Vector
HashMap fieldsMap=new HashMap();
//字段名与相对UploadedFile的映射
HashMap filesMap=new HashMap();
/**构造函数,遍历所有字段,分别存入文件MAP和字段MAP
*@paramrequest
*@paramtempDirectory
*@throwsBaseWebException
*/
//当生成一个类时就开始了对request传递过来的数据的解析
public FileUploadUtil(HttpServletRequest request,String tempDirectory) throws Exception {
this.request = request;
//这一句很重要,以前我没有加上,结果UTF-8编码时老是出现乱码问题,最后还是看了Struts的文件上传源代码是这样写的,才解决了乱码问题
String encoding=request.getCharacterEncoding();
fu = new DiskFileUpload();
fu.setSizeMax(44194304); //设置文件大小.
fu.setSizeThreshold(4096);
fu.setHeaderEncoding(encoding);
fu.setRepositoryPath(tempDirectory); //设置临时目录.
try {
//解析参数,在后面进行文件字段和普通字段值的进一步处理
fileItems = fu.parseRequest(request); //解析请求,返回一个集合.
}
catch (FileUploadException e) {
thrownew Exception(e);
}
Iterator i = fileItems.iterator();
//遍历解析好的参数,以区分文件还是普通字段,并作相应的处理(存入不同的hashMap)
while(i.hasNext())
{
FileItem fi = (FileItem)i.next();
//判断当前项是否为普通字段
if(fi.isFormField()) //这是用来确定是否为文件属性,
{
Vector vec=new Vector();
//需改正
String fieldName = fi.getFieldName(); //这里取得字段名称
//如果已经存在此字段信息(多选列表或多个同名的隐藏域等)
if(fieldsMap.get(fieldName)!=null)
{
vec=(Vector)fieldsMap.get(fieldName);
logger.info("value: fi.getString(request.getCharacterEncoding()));
//很重要!需要进行编码哦!!!
vec.add(fi.getString(request.getCharacterEncoding()));
}
//第一次取到这个名的字段
else
{
logger.info("value: "+fi.getString(request.getCharacterEncoding()));
vec.add(fi.getString(request.getCharacterEncoding()));
fieldsMap.put(fieldName,vec);
}
}
//为文件字段时
else
{
//传来的文件名不为空时
String fullName=fi.getName();
if(fullName!=null&&!("".equals(fullName)))
{
//这里是一个封装好的类型,封装的不太好,其中的getRealName()不//好用,但是获取扩展名和文件名的方法还是可以的。
UploadedFile uploadedFile=new UploadedFile(fi);
filesMap.put(fi.getFieldName(),uploadedFile);
}
}
}
}// FileUploadUtil
/**
*模仿request的getParameter方法,取得非文件的字段
*如果为多个值的,只返回第一个
*@paramparam
*@return为空或键值不存在返回null
*/
public String getParameter(String param)
{
if(param==null)
{
returnnull;
}
else
{
Vector vec=(Vector)fieldsMap.get(param);
if(vec!=null&&vec.size()>0)
{
return (String)vec.get(0);
}
elsereturnnull;
}
}//getParameter
public String[] getParameterValues(String param)
{
String[] values=null;
if(param==null)
{
returnnull;
}
else
{
Vector vec=(Vector)this.fieldsMap.get(param);
int size=vec.size();
values=new String[size];
if(vec!=null&&vec.size()>0)
{
for(int i=0;i<size;i++)
{
values[i]=(String)vec.get(i);
}
return values;
}
else
{
returnnull;
}
}//else
}
/**
*
*返回上传的文件的名称,如若没这个参数名,返回null
*@paramparamName
*@return
*/
public String getFileName(String paramName)
{
if(paramName!=null)
{
UploadedFile uploadedFile=(UploadedFile)this.filesMap.get(paramName);
if(uploadedFile!=null)
{
return uploadedFile.getRealName();
}
}
returnnull;
}
/**
*这个方法用来将文件字段保存在硬盘上。
*@paramparamName
*@paramnewNameWithoutExt
*@paramrelativePath
*@throwsBaseWebException
*/
publicvoid upLoadFile(String paramName,String newNameWithoutExt,String relativePath) throws Exception
{
if(paramName!=null)
{
UploadedFile uploadedFile=(UploadedFile)this.filesMap.get(paramName);
if(uploadedFile!=null&&uploadedFile.fileItem.getSize()>0)
{
String path=request.getSession().getServletContext().getRealPath("/");
path+=relativePath+newNameWithoutExt;
uploadedFile.write(path);
}
}
}
publicstaticvoid main(String[] args)
{
}
public List getFileItems() {
returnfileItems;
}
publicvoid setFileItems(List fileItems) {
this.fileItems = fileItems;
}
public HashMap getFieldsMap() {
returnfieldsMap;
}
publicvoid setFieldsMap(HashMap fieldsMap) {
this.fieldsMap = fieldsMap;
}
public HashMap getFilesMap() {
returnfilesMap;
}
publicvoid setFilesMap(HashMap filesMap) {
this.filesMap = filesMap;
}
public DiskFileUpload getFu() {
returnfu;
}
publicvoid setFu(DiskFileUpload fu) {
this.fu = fu;
}
public HttpServletRequest getRequest() {
returnrequest;
}
publicvoid setRequest(HttpServletRequest request) {
this.request = request;
}
}
//辅助的文件封装字段,还很不完善,比如缺少获取文件流的方法,以后考虑创建adapter
//来实现封装对象fileItem的一些方法。这里主要提供了获取扩展名和文件名的方法,比较//简陋
publicclass UploadedFile {
private String fullName="";
public FileItem fileItem;
/**
*@paramfileItem
*/
public UploadedFile(FileItem fileItem) {
this.fileItem = fileItem;
fullName=fileItem.getName();
}
public String getFileNameWithoutExt()
{
returnnull;
}
//返回文件的扩展名
public String getExt()
{
String[] values= fullName.split("\\.");
return values[values.length-1];
}
//不好用这个方法!!
public String getRealName()
{
String[] values= fullName.split("\\\\\\");
return values[values.length-1];
}
publicString getBaseFileName() {
// First, ask the JDK for the base file name.
String fileName = new File(this.fileItem.getName()).getName();
// Now check for a Windows file name parsed incorrectly.
int colonIndex = fileName.indexOf(":");
if (colonIndex == -1) {
// Check for a Windows SMB file path.
colonIndex = fileName.indexOf("\\\\");
}
int backslashIndex = fileName.lastIndexOf("\\");
if (colonIndex > -1 && backslashIndex > -1) {
// Consider this filename to be a full Windows path, and parse it
// accordingly to retrieve just the base file name.
fileName = fileName.substring(backslashIndex + 1);
}
return fileName;
}
publicvoid write(String path) throws Exception
{
try {
fileItem.write(new File(path));
} catch (Exception e) {
thrownew Exception(e);
}
}
}
使用方法就是分的简单了:
FileUploadUtil fu;
fu = new FileUploadUtil(request,"c:/");
String name=fu.getParameter("name");
logger.info("字段名; name ,值:"+name);
Map fileMap=fu.getFilesMap();
UploadedFile ufile=(UploadedFile) fileMap.get("myFile");
单个文件下就执行但是,整合在模块里面了就说这个为空