想自己做个ASP.NET上传文件时显示进度条的, 按照自己的想法,其实也就是显示每次已经上传的字节,从网上找到一个方法是能够把文件变成流以后再慢慢写入的,我在那个循环写入的时候每循环一次都把已经上传的字节保存在session中,然后在另一个页面我读取该session值,即是已上传的字节,我放在网上测试,上传大点的文件,在浏览器刷新的时候我再打开另一个页面,该页面只是读取session的值,但是我发现如果文件没有上传完的时候另一个读取session的值的页面也同时打不开,难道在写session的时候不能读取session吗?
请教大家,是怎么回事?下面附上代码:
HTML页面,只显示HTML的上传组件:
<form id="form1" name="uploadForm" method="post" enctype="multipart/form-data" action="upload.ashx">
    <input type="file" id="imgFile" name="imgFile" style="width: 220px;" />
    <input type="submit" value="上传"/>   
    </form>

upload.ashx上传一般处理程序,负责上传文件,通过流的方式
<%@ WebHandler Language="C#" class="upload" %>

using System;
using System.Web;

public class upload : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
   
    public void ProcessRequest (HttpContext context) {
        context.Response.ContentType = "text/plain";
        HttpPostedFile imgFile = HttpContext.Current.Request.Files["imgFile"];
        string savePath = context.Server.MapPath("~/uploadfile/niunan/"+imgFile.FileName);

long totalBytes = imgFile.ContentLength;
        System.IO.Stream st = imgFile.InputStream;
        System.IO.Stream so = new System.IO.FileStream(savePath, System.IO.FileMode.Create);
        long totalDownloadedByte = 0;  // 已经上传的大小
        byte[] by = new byte[1024];
        int osize = st.Read(by, 0, (int)by.Length);
        while (osize > 0)
        {
            totalDownloadedByte = osize + totalDownloadedByte;
            context.Session["len"] = totalDownloadedByte;  // 存session,表示已经上传了的字节
            so.Write(by, 0, osize);
            osize = st.Read(by, 0, (int)by.Length);
        }
        so.Close();
        st.Close();
       
        context.Response.Write("<br>保存成功!文件名:"+imgFile.FileName+", 总大小: "+totalBytes);
    }

public bool IsReusable {
        get {
            return false;
        }
    }

}

test.aspx页面,只获取session中的值:
    <form id="form1" runat="server">
    <%
        string str = Session["len"] == null ? "没有值" : Session["len"].ToString();
        Response.Write(str);
    %>
    </form>

我在上传一些大文件的时候,趁还没有上传完毕,就在浏览器另开一个窗口运行test.aspx,想直接读取session中的值,即已经上传的字节,但是发现test.aspx打不开,必须得等到文件上传完毕后才能打开的,读取到的时也只是整个文件的大小...

ASP.NET上传文件,已经上传的大小保存在session中,在另一个页面中读取session的值不行的更多相关文章

  1. vue-resource+iview上传文件取消上传

    vue-resource+iview上传文件取消上传 子组件: <template> <div class="upload-area-div"> <U ...

  2. Asp.net MVC 处理文件的上传下载

    如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...

  3. 利用Asp.net MVC处理文件的上传下载

    如果你仅仅只有Asp.net Web Forms背景转而学习Asp.net MVC的,我想你的第一个经历或许是那些曾经让你的编程变得愉悦无比的服务端控件都驾鹤西去了.FileUpload就是其中一个, ...

  4. asp.net web开发——文件的上传和下载

    HTML部分 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="index.a ...

  5. 利用uploadify+asp.net 实现大文件批量上传。

    前言 现在网上文件上传组件随便一搜都是一大堆,不过看大家一般都在用uploadify这个来上传文件.由于项目需要,我在来试了一下.因为第一次使用,也遇到了很多问题,特此记录! ------------ ...

  6. asp.net core 下载文件,上传excel文件

    下载文件: 代码: 后端代码: public IActionResult DownloadFile() { var FilePath = @"./files/deparment.xlsx&q ...

  7. asp.net (web)选择文件夹 上传文件

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...

  8. Uploadify 3.2上传文件,限制类型,大小,传递参数等

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="upload.aspx.cs ...

  9. php 上传文件实例 上传并下载word文件

    上传界面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

随机推荐

  1. AJAX 入门

    1. 同步交互与异步交互 1.1 同步交互 客户端发送一个请求, 需要等待服务器的响应结束,才能发送第二个请求! 刷新的是整个页面. 1.2 异步交互 客户端发送一个请求,无需等待服务器的响应,然后就 ...

  2. ThinkPHP在入口文件中判断是手机还是PC端访问网站

    <?php// +----------------------------------------------------------------------// | ThinkPHP [ WE ...

  3. Android系统移植与调试之------->增加一个双击物理按键打开和关闭闪光灯并将闪光灯状态同步到下拉菜单中

    最近有一个客户有这样的需求: 1.在[设置]--->[无障碍]中添加一个开关按钮. 如果打开开关的话,双击某个物理按键的时候,打开闪光灯,再双击该物理按键的时候,关闭闪光灯. 如果关闭开关的话, ...

  4. PAT 1068. 万绿丛中一点红(20)

    对于计算机而言,颜色不过是像素点对应的一个24位的数值.现给定一幅分辨率为MxN的画,要求你找出万绿丛中的一点红,即有独一无二颜色的那个像素点,并且该点的颜色与其周围8个相邻像素的颜色差充分大. 输入 ...

  5. 2、hive的基本操作

    1.创建数据库和表 1)创建数据库 hive> CREATE DATABASE IF NOT EXISTS userdb; OK Time taken: 0.252 seconds hive&g ...

  6. 阿里云下 centos7下启动程序总是被killed ,看内存占用情况以检查哪些服务存在问题并调整参数作调优

    很久不搭理自己的网站了,几天突然发现启动程序总是被killed, 于是查看了系统日志 vi /var/log/messages 发现出现 kernel: Out of memory: Kill pro ...

  7. Python常见序列详解

    一.Python中序列的分类 常见序列类型包括字符串(普通字符串和unicode字符串),列表和元组.所谓序列,即成员有序排列,可通过下标访问. 二.Python序列通用操作 下面我们将分别以字符串. ...

  8. 视频解码芯片SAA7111A的初始化

    为了完成SAA7111A的初始化,FPGA需要完成I2C控制器的设计. 之前本科的时候初步接触过I2C,但是编写一个Verilog的控制器还是觉得有点难度的.说实话,那时候都无从下手,对实现这样一个协 ...

  9. LeetCode:平衡二叉树【110】

    LeetCode:平衡二叉树[110] 题目描述 给定一个二叉树,判断它是否是高度平衡的二叉树. 本题中,一棵高度平衡二叉树定义为: 一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1. 示例 ...

  10. C#:连接本地SQL Server语句

    一.Windows身份验证方式 SqlConnection conn = new SqlConnection(); conn.ConnectionString = "Data Source ...