1.HTML编码:

<input type="file" />

2.控件:FileUpload

它是用来选择要上传的文件,还需要一个按钮来将选中的文件上传到服务器上

string path = "images/" + FileUpload1.FileName;
FileUpload1.SaveAs(Server.MapPath(path));

优化1:文件保留原有名称和后缀

string path = "images/" + FileUpload1.FileName;

优化2:防止重名,或是同一时间多个人同时上传同一名称文件

string path = "images/" + DateTime.Now.ToString("yyyyMMddhhssmmms") + Request.Cookies["ures"].Value + FileUpload1.FileName;

优化3:可以上传大文件,默认是4MB,4096KB
方法:扩容

在Web.config中的system.web标记中添加下面一句:
<httpRuntime maxRequestLength="扩容大小" />

注意:不要扩的太大,因为如果多人同时上传大文件,可能会造成服务器内存溢出,导致服务器崩溃。

优化4:超过上传要求的大小,阻止上传并提示文件过大
C#端解决:

if( FileUpload1.PostedFile.ContentLength>(1024*1024*10))
{
Labei1.Text="文件超过10M,不要上传这么大的!";
return;
}

C#端不好用,因为如果文件超过了最大长度,C#端是限制不住的,会直接将程序崩溃

JS端:

document.getElementById("Button1").onclick = function () {
//取出上传元素
var fi1 = document.getElementById("FileUpload1");
//判断是否有选中的文件
if (fi1.value.length <= 0) {
alert('请选择要上传的文件!');
return false;
}
else {
//验证选中的文件长度是否满足条件
if (fi1.files[0].size > (1024 * 1024 * 10))
{
alert('文件过大,不允许上传!');
return false;
}
}
};

优化5:限制可以选择的文件类型

在Fileupload属性里加 accept=".jpg,.jpeg,.png"

断点续传:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
public partial class DFile : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void LinBtnDFile_Click(object sender, EventArgs e)
{
// 创建一比特数组
byte[] buffer = new Byte[];
// 指定要下载文件的路径.
string filePath = @"D:\爱智旮旯.rar";
// 或取文件名包括扩展名
string fileName = Path.GetFileName(filePath);
Stream fileStream = null;
try
{
// 打开文件
fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
Response.Clear();
// 获取文件的大小
long fileSize = fileStream.Length;
long sum = ;
if (Request.Headers["Range"] != null)
{
Response.StatusCode = ; // 表示返回到客户端的 HTTP 输出状态的整数。默认值为 200。
sum = long.Parse(Request.Headers["Range"].Replace("bytes=", "").Replace("-", ""));
}
if (sum != )
{
Response.AddHeader("Content-Range", "bytes " + sum.ToString() + "-" + ((long)(fileSize)).ToString() + "/" + fileSize.ToString());
}
// 获取部分http头信息
Response.AddHeader("Content-Length", ((long)(fileSize - sum)).ToString());
Response.ContentType = "application/octet-stream";
//获取文件来源
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(Request.ContentEncoding.GetBytes(fileName)));
// Response.Flush();
fileStream.Position = sum; //设置当前流位置
fileSize = fileSize - sum;
// 当文件大小大于0是进入循环
while (fileSize > )
{
// 判断客户端是否仍连接在服务器
if (Response.IsClientConnected)
{
// 获取缓冲区中的总字节数.
int length = fileStream.Read(buffer, , );
// 写入数据
Response.OutputStream.Write(buffer, , length);
// 将缓冲区的输出发送到客户端
Response.Flush();
buffer = new Byte[];
fileSize = fileSize - length;
}
else
{
//当用户断开后退出循环
fileSize = -;
}
}
}
catch (Exception ex)
{
Response.Write("Error : " + ex.Message);
}
finally
{
if (fileStream != null)
{
//关闭文件
fileStream.Close();
}
Response.End();
}
}
}

Webform(文件上传)的更多相关文章

  1. webform文件上传、图片水印、验证码

    文件上传: 所用控件:FileUpload 使用时的思路: 1.判断用户是否选中了文件 FileUpload.FileName获取选中的文件名,判断长度,如果长度大于零就代表已经选择了文件 JS端:通 ...

  2. Webform 文件上传、 C#加图片水印 、 图片验证码

    文件上传:要使用控件 - FileUpload 1.如何判断是否选中文件? FileUpload.FileName - 选中文件的文件名,如果长度不大于0,那么说明没选中任何文件 js - f.val ...

  3. WebForm 文件上传

    //Button1的点击事件 //FileUpload1.FileName为所传文件的名字. //以DateTime.Now.ToString("yyyyMMddhhmmssms" ...

  4. 【2017-05-30】WebForm文件上传

    用 FileUpload控件进行上传文件. <asp:FileUpload ID="FileUpload1"  runat="server" /> ...

  5. WebForm文件上传

    用 FileUpload控件进行上传文件. <asp:FileUpload ID="FileUpload1"  runat="server" /> ...

  6. 【2017-05-30】WebForm文件上传。从服务端删除文件

    用 FileUpload控件进行上传文件. <asp:FileUpload ID="FileUpload1"  runat="server" /> ...

  7. webform 文件上传(头像上传) 隐藏FileUpload

    <div> <%-- 核心思想:把FileUpload设为relative,top:-200px;opacity: --%> <div id="localIma ...

  8. MVC&WebForm对照学习:文件上传(以图片为例)

    原文  http://www.tuicool.com/articles/myM7fe 主题 HTMLMVC模式Asp.net 博客园::首页::  ::  ::  ::管理 5 Posts :: 0 ...

  9. WebForm之FileUpload控件(文件上传)

    FileUpload控件要与Button.LinkButton.ImageButton配合使用 FileUpload控件的方法及属性: 1.SaveAs("要上传到服务器的绝对路径" ...

随机推荐

  1. 使用SQL Server Audit记录数据库变更

        最近工作中有一个需求,就是某一个比较重要的业务表经常被莫名其妙的变更.在SQL Server中这类工作如果不事前捕获记录的话,无法做到.对于捕获变更来说,可以考虑的选择包括Trace,CDC. ...

  2. 30分钟全面解析-图解AJAX原理

    先上原理图: 高清无码图在这里:点我查看大图!!! 背景: 1.传统的Web网站,提交表单,需要重新加载整个页面. 2.如果服务器长时间未能返回Response,则客户端将会无响应,用户体验很差. 3 ...

  3. codeforces B. Pasha and String(贪心)

    题意:给定一个长度为len的字符序列,然后是n个整数,对于每一个整数ai, 将字符序列区间为[ai,len-ai+1]进行反转.求出经过n次反转之后的序列! /* 思路1:将区间为偶数次的直接去掉!对 ...

  4. SQL*Loader之CASE7

    CASE7 1. SQL脚本 case7包含两个SQL脚本,一个是删除脚本ulcase7e.sql,一个是创建脚本ulcase7s.sql [oracle@node3 ulcase]$ cat ulc ...

  5. Testing - Tips

    1 --- 冒烟测试.可用性测试和回归测试的区别? 在测试领域中,冒烟测试(smoke test).可用性测试(sanity test)和回归测试(regression test)彼此之间很相似,范围 ...

  6. Linux - History

    history命令 打印所有命令记录:history 打印最近10条记录:history 10 执行第123条命令记录:!123 重复执行上一条命令:!! 执行最后一次以ls开头的命令:!ls 逐屏列 ...

  7. 【Java基础】序列化与反序列化深入分析

    一.前言 复习Java基础知识点的序列化与反序列化过程,整理了如下学习笔记. 二.为什么需要序列化与反序列化 程序运行时,只要需要,对象可以一直存在,并且我们可以随时访问对象的一些状态信息,如果程序终 ...

  8. 如何解决Android SDK中离线文档打开慢的问题

    原文:http://blog.csdn.net/hansel/article/details/39268511 Android SDK中的离线文档虽然都是本地文件,但是有很多Javascript, C ...

  9. LeetCode - Binary Tree Level Order Traversal II

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  10. LINQ的Any方法

    返回布尔值,判断集合中是否有元素满足某一条件. source code: IEnumerable<string> str = new List<string> { " ...