文件下载
//指定文件MIME类型
Response.ContentType = "application/msword";
//下载头指令
Response.AddHeader("Content-Disposition", "attchment;filename=c#基础概念.doc");
//Response.WriteFile("files/1.doc");//将文件直接写入到http响应输出流
//Response.Flush();//向客户端发送当前缓冲的所有输出
//下载大文件应该用流操作
Stream st = Response.OutputStream;//http响应输出流(文件的数据最初在服务器端,最终写入到st中)
FileStream fs = new FileStream(Server.MapPath("files/1.doc"), FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] buffer=new byte[1024];
int count;//每次真正读取到的字节数
while((count=fs.Read(buffer,0,1024))>0)
{
//读到数据(数据目前在缓冲区)
//把缓冲区里面的数据写入到st中
st.Write(buffer, 0, count);
//发送数据
st.Flush();//清空缓冲区,把数据发送到客户端
}
fs.Flush();
fs.Close();
st.Close();
文件上传
//做文件操作,form标记必须有enctype="multipart/form-data"属性(ASP.NET会自动生成,但HTML控件必须手动添加)
HttpPostedFile hpf = FileUpload1.PostedFile;//获取上传的文件
//获取上传文件的大小
int len = hpf.ContentLength;//注意:以字节为单位
string type = hpf.ContentType;//上传文件的MIME类型
string fileName = Path.GetFileName(hpf.FileName);
Response.Write("文件大小:" + len + "
" + "MIME类型:" + type + "
" + "文件名:" + fileName);
//保存路径
//保存文件的全路径不能重名,否则,后上传的会覆盖前面的
string path = "UpLoadFiles\\" + DateTime.Now.Ticks + fileName;
//开始上传
//FileUpload1.SaveAs(Server.MapPath(path));//SaveAs 方法是一次性把文件上传到服务器,不适合大文件上传,可能把服务器卡死
//应该用流来上传大文件
Stream s = hpf.InputStream;//把文件的数据读取到st流中
//创建一个文件流来把上传的文件写入到服务器上
FileStream fs = new FileStream(path,FileMode.Create,FileAccess.Write,FileShare.Read);
byte[] buffer=new byte[1024];//缓冲区
int readLen;//每次真正读取到的字节数
while ((readLen=s.Read(buffer, 0, 1024))>0)
{
//读到数据了(此时独到的数据在buffer缓冲区中)
//开始把文件写入到服务器的磁盘中
fs.Write(buffer, 0, readLen);
}
fs.Flush();//请空缓冲区,使得所有缓冲区的数据都写入到文件中
s.Flush();
fs.Close();//关闭流,释放资源
s.Close();
多文件上传
//获取用户发送过来的文件集合
HttpFileCollection hfc= Request.Files;
//多文件上传,还是要把文件一个一个的写入到服务器磁盘
foreach (string fKey in hfc)
{
//循环遍历所有文件的集合,得到的是文件对应的KEY,也就是"name"属性
//Response.Write(fKey);
HttpPostedFile hpf= hfc[fKey];//根据key获取对应的文件
//只能上传图片(.jpg,.bmp,.png)
//注意:有的文件上传控件可能没有选择文件
string type = Path.GetExtension(hpf.FileName).ToUpper();
string fileName = Path.GetFileName(hpf.FileName);
if (fileName=="")
{
Response.Write(fKey+"没有上传文件");
}
else
{
if (type == ".JPG" || type == ".BMP" || type == ".PNG")
{
//设置保存路径
string path = Server.MapPath("UpLoadFiles\\" + DateTime.Now.Ticks + fileName);
Stream s = hpf.InputStream;//把文件的数据读取到st流中
//创建一个文件流来把上传的文件写入到服务器上
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.Read);
byte[] buffer = new byte[1024];//缓冲区
int readLen;//每次真正读取到的字节数
while ((readLen = s.Read(buffer, 0, 1024)) > 0)
{
//读到数据了(此时独到的数据在buffer缓冲区中)
//开始把文件写入到服务器的磁盘中
fs.Write(buffer, 0, readLen);
}
fs.Flush();//请空缓冲区,使得所有缓冲区的数据都写入到文件中
s.Flush();
fs.Close();//关闭流,释放资源
s.Close();
Response.Write("上传成功");
}
else
{
Response.Write(type + "不是图片格式");
}
}