private void Button1_Click(object sender, System.EventArgs e)
{
string strpic,str,path;
strpic="";
path=this.Page.Request.PhysicalApplicationPath.ToString();
str=f_pic.PostedFile .FileName.ToString();
str=GetFileNameFromPath(str);
path = path+"file\\"+str;
this.f_pic.PostedFile.SaveAs(path);
} string GetFileNameFromPath(string path)
{
//PointPosition :点号所在的位置。
//Len :路径的总长度。
int PointPosition,Len;
Len = path.Length;
PointPosition = path.IndexOf(".",0,Len-1);
return path.Substring(PointPosition,Len-PointPosition);
}
还有一点注意,<form id="Form1" method="post"  encType="multipart/form-data"  runat="server">一定要加上这句“encType="multipart/form-data"”

解决方案 »

  1.   

    http://www.asp-net.net/aspnet/default.asp?infoid=31
    这里有详细答案。
      

  2.   

    不好意思,各位,我还有一个问题
    如果我要有上传文件默认路径怎么做呢?file控件中好像不能够有默认路径的
    麻烦各位了
      

  3.   

    <script language="VB" runat="server">
         Sub UploadFile(sender As Object, e As EventArgs)
         
         If FileUp.PostedFile.ContentLength = 0 Then
         FileInfo.Visible = False
         Exit Sub
         Else
         FileInfo.Visible = True
         End If
         
         FSize.Text = CStr(FileUp.PostedFile.ContentLength)
         FName.Text = FileUp.PostedFile.FileName
         
         Dim FileSplit() As String = Split( FileUp.PostedFile.FileName, "\" )
         Dim FileName As String = FileSplit(FileSplit.Length-1)
         FileUp.PostedFile.SaveAs( Server.MapPath(".") & "\Upload\" & FileName )
         
         Dim Exts() As String = Split( FileName, "." )
         Dim Ext As String = LCase(Exts(Exts.Length-1))
         If Ext <> "jpg" And Ext <> "jpeg" And Ext <> "gif" And Ext <> "txt" And Ext <> "htm" And Ext <> "html" Then
         FDisplay.Visible = False
         Else
         FDisplay.Text = "<A Target='_blank' HREF='Upload/" & _
         FileName & "'>上传文件</A>"
         End If
         End Sub
         </script>
         
         <Html>
         <Body BgColor=White>
         <H3>上传文件<Hr></H3>
         
         <Form Enctype="multipart/form-data" runat="server">
         上传文件
         <Input Type="File" id="FileUp" runat="server"><P>
         <Asp:button id="Upload" OnClick="UploadFile" Text="Upload" 
         runat="server"/>
         </form><Hr>
         
         <Div id="FileInfo" Visible="False" runat="server">
         上传文件名 <Asp:Label id="FName" runat="server"/><br>
         上传文件大小 <Asp:Label id="FSize" runat="server"/><br>
         <Asp:Label id="FDisplay" runat="server"/>
         </Div>
         
         </Body>
         </Html>
         
         
      

  4.   

    功能:
         1。把图片文件(JPG GIF PNG)上传,
         2。保存到指定的路径(在web.config中设置路径,以文件的原有格式保存),
         3。并自动生成指定宽度的(在web.config中设置宽度)
         4。和指定格式的(在web.config中指定缩略图的格式)
         5。和原图比例相同的缩略图(根据宽度和原图的宽和高计算所略图的高度)
         6。可以判断是否已经存在文件
         7。如果不覆盖,则给出错误
         8。如果选中"覆盖原图"checkbox,则覆盖原图。
         9。可以根据要求,在webform上设置1个以上的file input和相应的checkbox
         10。并在文件上传完毕后,显示原图的文件名,尺寸,字节,和
         11。缩略图的文件名尺寸。
         12。缩略图的文件名格式:原图+"_thumb."+指定格式,如:test.jpg_thumb.gif,以便于管理。
         
         --------------------
         public void UploadFile(object sender, System.EventArgs e)
         {
         
         string imgNameOnly, imgNameNoExt, imgExt;
         string imgThumbnail;
         int erroNumber = 0;
         System.Drawing.Image oriImg, newImg;
         
         StringBuilder picInfo = new StringBuilder();
         
         if(Page.IsValid)
         {
         
         
         for(int i = 0;i < Request.Files.Count; i++)
         {
         HttpPostedFile PostedFile = Request.Files[i];
         string fileExt = (System.IO.Path.GetExtension(PostedFile.FileName)).ToString().ToLower();
         
         imgNameOnly = System.IO.Path.GetFileName(PostedFile.FileName);
         if(fileExt == ".jpg" || fileExt == ".gif" || fileExt == ".png")
         {
         
         if(System.IO.File.Exists(ConfigurationSettings.AppSettings["FePicSavePath"]+ imgNameOnly) && (checkboxlistRewrite.Items[i].Selected == false))
         {
         erroNumber = erroNumber + 1;
         picInfo.Append("<b>错误:</b>文件("+ (i+1) +") " + imgNameOnly + " 已经存在,请修改文件名<br>" );
         }
         }
         else
         {
         erroNumber = erroNumber + 1;
         picInfo.Append("<b>错误:</b>文件("+ (i+1) +") " + imgNameOnly + " 扩展名 " + fileExt + " 不被许可<br>" );
         } 
         
         }
         
         if(erroNumber > 0) 
         {
         picInfo.Append("<font color=red>全部*作均未完成,请修改错误,再进行*作</font><br>");
         }
         else 
         {
         for(int i = 0;i < Request.Files.Count; i++)
         {
         
         HttpPostedFile PostedFile = Request.Files[i];
         imgNameOnly = System.IO.Path.GetFileName(PostedFile.FileName);
         imgNameNoExt = System.IO.Path.GetFileNameWithoutExtension(PostedFile.FileName);
         imgExt = System.IO.Path.GetExtension(PostedFile.FileName).ToString().ToLower();
         
         
         oriImg = System.Drawing.Image.FromStream(PostedFile.InputStream);
         newImg = oriImg.GetThumbnailImage(Int32.Parse(ConfigurationSettings.AppSettings["FePicThumbWidth"]),Int32.Parse(ConfigurationSettings.AppSettings["FePicThumbWidth"])*oriImg.Height/oriImg.Width,null,new System.IntPtr(0));
         switch(imgExt)
         {
         //case ".jpeg":
         case ".jpg":
         oriImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly , System.Drawing.Imaging.ImageFormat.Jpeg);
         break;
         case ".gif":
         oriImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly , System.Drawing.Imaging.ImageFormat.Gif);
         break;
         case ".png":
         oriImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly , System.Drawing.Imaging.ImageFormat.Png);
         break;
         }
         
         //oriImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameNoExt + ".jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
         
         switch(ConfigurationSettings.AppSettings["FePicThumbFormat"].ToString().ToLower())
         {
         //jpeg format can get the smallest file size, and the png is the largest size
         //case "jpeg":
         case "jpg":
         newImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly + "_thumb.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
         imgThumbnail = imgNameOnly + "_thumb.jpg";
         break;
         case "gif":
         newImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly + "_thumb.gif",System.Drawing.Imaging.ImageFormat.Gif);
         imgThumbnail = imgNameOnly + "_thumb.gif";
         break;
         case "png":
         newImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly + "_thumb.png",System.Drawing.Imaging.ImageFormat.Png);
         imgThumbnail = imgNameOnly + "_thumb.png";
         break;
         default:
         newImg.Save(ConfigurationSettings.AppSettings["FePicSavePath"] + imgNameOnly + "_thumb.jpg",System.Drawing.Imaging.ImageFormat.Jpeg);
         imgThumbnail = imgNameOnly + "_thumb.jpg"; 
         break;
         
         }//switch
         
         picInfo.Append("<b>文件 名:</b>" + imgNameOnly + " ( " + oriImg.Width + " x " + oriImg.Height + " ) " + PostedFile.ContentLength/1024 + "KB<br>");
         picInfo.Append("<b>缩略图名:</b>" + imgThumbnail + " ( " + newImg.Width + " x " + newImg.Height + " )<br><br>");
         
         oriImg.Dispose();
         newImg.Dispose(); 
         
         }//for 
         picInfo.Append("<font color=red>所有*作成功</font><br>");
         
         }// if erronumber = 0
         
         
         
         }
         else
         {
         picInfo.Append("<font color=red>有错误,请检查。*作未成功</font><br>");
         
         }
         
         lblPicInfo.Text = picInfo.ToString();
         
         }
      

  5.   

    在Web编程中,我们常需要把一些本地文件上传到Web服务器上,上传后,用户可以通过浏览器方便地浏览这些文件,应用十分广泛。 那么使用C#如何实现文件上传的功能呢?下面笔者简要介绍一下。 首先,在你的Visual C# web project 中增加一个上传用的Web Form,为了要上传文件,需要在ToolBox中选择HTML类的File Field控件,将此控件加入到Web Form中,然而此时该控件还不是服务端控件,我们需要为它加上如下一段代码:<input id=uploadfile1 type=file size=49 runat="server">,这样它就成为服务端控件了,如果需要同时上传数个文件时,我们可以相应增加此控件。 需要注意的是代码中一定要把<form>的属性设置成为: 
    <form method=post encType=multipart/ form-data runat="server">如果没有这个属性,就不能实现上传。 然后在此Web Form中增加一个Web Form类的Button,双击Button添加如下代码: 
    //上传图片的程序段DateTime now = DateTime.Now ; //取现在时间到DataTime类的对象now中string strBaseLocation = "D:\\web\\FC\\pic\\";//这是文件将上传到的服务器的绝对目录if (uploadfile1.PostedFile.ContentLength != 0) //判断选取对话框选取的文件长度是否为0  {uploadfile1.PostedFile.SaveAs(strBaseLocation+now.DayOfYear.ToString()+uploadfile1.PostedFile.ContentLength.ToString()+".jpg");//执行上传,并自动根据日期和文件大小不同为文件命名,确保不重复Label1.Text="图片1已经上传,文件名为:"+now.DayOfYear.ToString()+uploadfile1.PostedFile.ContentLength.ToString()+".jpg"; navigator.Insert(System.Xml.TreePosition.After, XmlNodeType.Element,"pic1","","") ;navigator.Insert(System.Xml.TreePosition.FirstChild, XmlNodeType.Text,"pic1","","") ;navigator.Value= now.DayOfYear.ToString()+uploadfile1.PostedFile.ContentLength.ToString()+".jpg" ;navigator.MoveToParent() ;}上面的代码用于笔者开发的一个使用XML文件存储新闻信息的系统中,后面几句代码作用是写上传文件信息到XML文件中。如果要上传其他类型文件,只需要将jpg改为相应类型的后缀名即可,如改为doc即可上传Word文件,浏览器即可直接浏览上传的Word文件。 【注意事项】 
    1. 上传文件不可以无限大; 2. 要注意IIS的安全性方面的配合; 3. 用Visual Studio 的安装项目做安装程序的时候,请注意安装程序所在的绝对路径问题; 4. 注意文件上传后的重名问题。