首页 > 代码库 > Asp.Net:上传文件

Asp.Net:上传文件

Asp.Net中很方便就能做个上传,例如做一个图片的上传:

<asp:FileUpload ID="picUpload" runat="server" /> <asp:Button ID="btnUpload" runat="server"  Text="上传" CssClass="btn"  onclick="btnUpload_Click" CausesValidation="false"/>

对应的上传代码如下:

protected void btnUpload_Click(object sender, EventArgs e)        {            if (!picUpload.HasFile)            {                picAssetItem.ImageUrl = "";                labUpload.Text = "请选择要上传的图片";                return;            }            string fileExtension = Path.GetExtension(picUpload.FileName).ToLower();            Match match = Regex.Match(fileExtension, "jpg|jpeg|png");            if (!match.Success)            {                picAssetItem.ImageUrl = "";                labUpload.Text = "请上传jpg或者png格式的图片";                return;            }            if (picUpload.PostedFile.ContentLength > 8192000)            {                picAssetItem.ImageUrl = "";                labUpload.Text = "文件大小超出8M!请重新选择!";                return;            }            string uploadPath = ConfigurationManager.AppSettings["UploadPath"];            uploadPath += DateTime.Today.ToString("yyyy-MM-dd");            if (!Directory.Exists(Server.MapPath(uploadPath)))            {                log.Info("Creating folder " + uploadPath + " on server");                try                {                    Directory.CreateDirectory(Server.MapPath(uploadPath));                }                catch (Exception ex)                {                    log.Error("Failed to create folder");                    log.Error(ex);                    labUpload.Text = "系统错误,上传失败";                    return;                }            }            string imageUUID = System.Guid.NewGuid().ToString();            string imageName = imageUUID + fileExtension;            string imagePath = Server.MapPath(uploadPath + "/" + imageName);            string thumbImagePath = Server.MapPath(uploadPath + "/thumb-" + imageName);            try            {                picUpload.PostedFile.SaveAs(imagePath);                System.Drawing.Image image = System.Drawing.Image.FromStream(picUpload.PostedFile.InputStream, true);                System.Drawing.Size newSize = new System.Drawing.Size(400, 300);                System.Drawing.Image bitmap = new System.Drawing.Bitmap(newSize.Width, newSize.Height);                System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bitmap);                graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;                             graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                graphics.Clear(System.Drawing.Color.White);                graphics.DrawImage(image,                     new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),                     new System.Drawing.Rectangle(0, 0, image.Width, image.Height),                     System.Drawing.GraphicsUnit.Pixel);                bitmap.Save(thumbImagePath, System.Drawing.Imaging.ImageFormat.Jpeg);            }            catch (Exception ex)            {                log.Error("Failed to save image");                log.Error(ex);                labUpload.Text = "系统错误,上传失败";                return;            }            txtImagePath.Text = DateTime.Today.ToString("yyyy-MM-dd") +"/" + imageName;            picAssetItem.ImageUrl = uploadPath + "/thumb-" + imageUUID + ".jpg";            labUpload.Text = "上传成功";        }

上面的代码是把图片存到本地的文件夹中,按日期进行存储,存储的文件用uuid进行命名。同时生成一张固定大小的缩略图,用来显示用。

上传小文件,还是蛮方便的,不过需要注意的是,对服务器的文件夹,必须对NETWORK组添加读写的权限:

 

另外,貌似只能上传小于4M 的文件,稍大的文件上传会直接无法显示网页。这个也是可以设置的,具体不想深究,能用就行:

<system.web>...<!-- 加入下面设置--><httpRuntime executionTimeout="90" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false" minFreeThreads="8" minLocalRequestFreeThreads="4" appRequestQueueLimit="100"/></system.web>