文件上传:
//把相对路径变成绝对路径。
string absolutePath = Server.MapPath(relativePath);
FileUpload控件:
属性:
FileName:文件名
HasFile:bool 是否选中了文件
FileBytes:要上传文件的二进制数据
方法:
SaveAs(string 绝对路径):上传,另存为。
一、上传到硬盘文件夹
(一)传单个文件
第一步:准备好文件及路径:
//把之前在客户端的文件名给取出来
string fileName = FileUpload1.FileName;
//防止文件重名
fileName = DateTime.Now.ToString("yyyyMMddhhmmsss") + fileName;
//把相对路径转化为绝对路径
string path = Server.MapPath("uploads/" + fileName);
第二步:执行上传:
//上传
FileUpload1.SaveAs(path); //参数必须根路径
注意:
1.如何防止文件重名?
2.如何防止同一时间点不同用户传统一文件名?
每个客户端登陆都有自己的一个ssesion空间,再加上session["用户名"(或"key名")]区分。
(二)传多个文件:
思路:遍历表单中所有的FileUpload控件,如果选择文件就上传
int index = 0;
foreach (Control ctrl in form1.Controls)
{
if (ctrl is FileUpload)
{
index++;
//取得每个上传控件
FileUpload upload = ctrl as FileUpload;
//上传控件中选上文件了
if (upload.HasFile)
{
//做文件路径出来
string path = Server.MapPath("uploads/" + DateTime.Now.ToString("yyyyMMddhhmmss") + index.ToString("00") + upload.FileName);
//上传
upload.SaveAs(path);
}
}
}
二、上传到数据库Image字段:
(一)传到数据库去
1.做数据库的操作代码。DA Data
Image字段对应在程序里是byte[]类型
2.做界面上的代码。
a.把界面的值取出来
FileUpload1.FileBytes - 用来获得上传文件的二进制数据。
b.送到数据库去
(二)从数据库中找出来,显示出来
法一:缺点:会生成垃圾文件
在服务端生成一个JPG,把这个JPG的路径赋给Image控件
//从数据库中把数据取出来
PictureDA da = new PictureDA();
PictureData data=da.Select(Convert.ToInt32(TextBox1.Text));
//流
string temp = Server.MapPath("imag/temp.jpg");
FileStream fs = new FileStream(temp, FileMode.Create);
fs.Write(data.Fill, 0, data.Fill.Length);
fs.Close();
//显示
Image1.ImageUrl = "imag/temp.jpg"
法二:单独做一个用来显示图片二进制数据的页面。把这个页面赋给Image控件。
新页面:
string ids = Request["id"].ToString();
PictureData data = new PictureDA().Select(Convert.ToInt32(ids));
if (data!=null)
{
Byte[] buff=data.Fill;
Response.OutputStream.Write(buff,0,buff.Length);
Response.End();
}
显示图片的按钮:
Image1.ImageUrl = "Default2.aspx?id="+TextBox1.Text;
上传图片加水印:
//一、从上传数据中,转化成图片对象
Stream s = FileUpload1.FileContent;
System.Drawing.Image img = System.Drawing.Image.FromStream(s);
//二、对图片对象进行画水印
//1.造笔
SolidBrush brush = new SolidBrush(Color.Yellow);
//2.造字体
Font font = new Font("微软雅黑", 18);
//3.找到绘图区域
Graphics g = Graphics.FromImage(img);
//4.确定开始画的位置
float x = 0, y = 0;
SizeF size = g.MeasureString("http:\\www.hao123.com",font);
x = img.Width - size.Width;
y = img.Height - size.Height;
//5.开始画
g.DrawString("http:\\www.hao123.com", font, brush, x, y);
//三、图片对象另存为硬盘上去
string filename = FileUpload1.FileName;
string path = Server.MapPath("imag/" +DateTime.Now.ToString("yyyyMMdd")+ filename);
img.Save(path);
验证码:注意using System.Drawing;
using System.IO;
验证码页面
public partial class YZM : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //造一个图片 Bitmap img = new Bitmap(60, 30); //生成个随机数 string str = "abcdefghigklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; Random random = new Random(); string code = ""; for (int i = 0; i < 4; i++) { int start = random.Next(str.Length); code += str.Substring(start, 1); } //把随机数放到图片上 //造笔 SolidBrush brush = new SolidBrush(Color.White); //造字 Font font = new Font("宋体",15); //找到绘图区域 Graphics g = Graphics.FromImage(img); //找位置 //a.把图片背景涂白 g.FillRectangle(brush, 0, 0, 60, 30); //b.给画笔换个颜色 brush.Color = Color.Red; //开始画 g.DrawString(code,font,brush,0,0); //把图片保存到输出流中去 img.Save(Response.OutputStream,System.Drawing.Imaging.ImageFormat.Jpeg); } }
主页面不写代码,但ImageUrl="YZM.aspx"调用验证码页面;onclick="changPIC()" JS代码每次点击都换图。
<body> <form id="form1" runat="server"> <div> 验证码:<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> <asp:Image ID="Image1" runat="server" ImageUrl="YZM.aspx" onclick="changPIC()"/> <br /> <asp:Button ID="Button1" runat="server" Text="Button" /> </div> </form> </body>
JAVASCRIPT:
<script language="javascript"> function changPIC() { var img = document.getElementById("Image1"); img.setAttribute("src","YZM.aspx?id="+Math.random()); } </script>