高分求帮助(各位大侠帮帮忙!)

keybows 2010-07-27 10:13:47

default页面,一个html的button和file
然后通过button提交到
<form id="form1" target="UploadWindow" method="post" action="upload.aspx" enctype="multipart/form-data">
upload.aspx页面
default.aspx本页面
function SendUpload()
{
form1.submit();
result = window.setInterval("GetValue()",1000);
}
function GetValue()
{
var percent = "<%=GetUploadStatus() %>";
alert(percent);
document.getElementById("bar").style.width=percent+"%";
if(percent!=100)
alert(percent);
else
window.clearInterval(result);
}
每秒刷新GetUploadStatus()这个方法获取值
default.aspx.cs
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["UploadInfo"] = new UploadInfo { };
}
}
public int GetUploadStatus()
{
UploadInfo uploadinfo = HttpContext.Current.Session["UploadInfo"] as UploadInfo;
//UploadInfo uploadinfo = new UploadInfo();
if (uploadinfo != null)
{
int soFar = uploadinfo.UploadLength;
int total = uploadinfo.ContentLength;
int percentComplete = (int)Math.Ceiling((double)soFar / (double)total * 100);
//int percentComplete = 5;
string message = string.Format("上传{0}......{1} of {2}", uploadinfo.FileName, uploadinfo.UploadLength, uploadinfo.ContentLength);
return percentComplete;
}
else
return 1000;
}
然后在upload.aspx页面
if (!IsPostBack)
{
UploadInfo uploadinfo = this.Session["UploadInfo"] as UploadInfo;
HttpPostedFile postfile = Request.Files["upload"];
//UploadInfo uploadinfo = new UploadInfo();
uploadinfo.IsReady = true;
if (postfile != null && postfile.ContentLength != 0)
{
string path = Server.MapPath(@"~/upload");
uploadinfo.FileName = Path.GetFileName(postfile.FileName);
uploadinfo.ContentLength = postfile.ContentLength;
uploadinfo.UploadLength = 0;
//uploadinfo.IsReady = true;
int bufferSize = 1;
byte[] buffer = new byte[bufferSize];
using (FileStream fs = new FileStream(Path.Combine(path, uploadinfo.FileName), FileMode.Create))
{
while (uploadinfo.UploadLength < uploadinfo.ContentLength)
{
int bytes = postfile.InputStream.Read(buffer, 0, bufferSize);
fs.Write(buffer, 0, bytes);
uploadinfo.UploadLength += bytes;
Thread.Sleep(100);
}
}
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>window.parent.message('" + uploadinfo.UploadLength + "')</script>");
}
else
Page.ClientScript.RegisterStartupScript(Page.GetType(), "", "<script>window.parent.message('请选择文件!')</script>");
uploadinfo.IsReady = false;
}
循环给uploadinfo.UploadLength这个赋值
然后通过这个值除整个图片的大小获取百分比。
可是一直不行,出现了个-2147483648这个值
哪里出问题了呢
...全文
709 28 打赏 收藏 转发到动态 举报
写回复
用AI写文章
28 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjp2006 2011-12-03
  • 打赏
  • 举报
回复
bufferSize越大,上传越快。。。(要从当前流中最多读取的字节数。)

边城的刀声 2010-07-29
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 keybows 的回复:]

ls的兄台 你会遇到那个进度条那一会跳高一会跳低的吗?
如果没有 那就是我这边的问题了!
[/Quote]
没有,我这边没有遇到这个情况
专爆菜鸟 2010-07-28
  • 打赏
  • 举报
回复
关注。眼睛看花了
szhuk 2010-07-28
  • 打赏
  • 举报
回复
关注一下
keybows 2010-07-28
  • 打赏
  • 举报
回复
非哥大大
有时它会跳到好高又跳回来
例如有时跳到45然后又变8
还有它好象是全部上传完后然后才开始加载那个进度条
keybows 2010-07-28
  • 打赏
  • 举报
回复
如果上传40m以上那个进度条会有点慢
keybows 2010-07-28
  • 打赏
  • 举报
回复
ls的兄台 你会遇到那个进度条那一会跳高一会跳低的吗?
如果没有 那就是我这边的问题了!
边城的刀声 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 keybows 的回复:]

非哥大大
谢谢你还特地测试了下
不过有点问题,进度条有时会跳1% 有时63% 然后就在跳回来
还有进度条进度有点慢,是改int bufferSize = 10000;这个吗?
麻烦有空在过来帮忙下
[/Quote]
我测试的时候用bufferSize=5000
window.setTimeout(ajaxGet, 100);
这样进度条进度看起来很快的。。。
继续消化中……
边城的刀声 2010-07-28
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 keybows 的回复:]

非哥大大
谢谢你还特地测试了下
不过有点问题,进度条有时会跳1% 有时63% 然后就在跳回来
还有进度条进度有点慢,是改int bufferSize = 10000;这个吗?
麻烦有空在过来帮忙下
[/Quote]
改的太小的话,可能会影响传输速度,另外setinterval那个值可以再小些
同时感谢楼主提出这么精彩的问题,和阿非兄这么精彩的回答
keybows 2010-07-28
  • 打赏
  • 举报
回复
非哥大大
谢谢你还特地测试了下
不过有点问题,进度条有时会跳1% 有时63% 然后就在跳回来
还有进度条进度有点慢,是改int bufferSize = 10000;这个吗?
麻烦有空在过来帮忙下
keybows 2010-07-27
  • 打赏
  • 举报
回复
哪位大侠有空!可以的话我源码发给你看看!
先谢谢了!
keybows 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 sandy945 的回复:]
首先说 你可能用到的技术 ,多线程 + ajax 或 服务器推技术
-------------------------------------------------------

你现在是使用了线程休眠来显示百分比, 但实际情况可能是 百分比不准确 就是没法准确的获取到进度情况

所以你可以考虑 在上传的过程中显示 gif 图片 或其他等待的动画 直至上传结束
[/Quote]如果是显示一个动画用ajax我会做!
现在想做百分比的
非哥可以指点下不!
myhope88 2010-07-27
  • 打赏
  • 举报
回复
路过,来关注下
阿非 2010-07-27
  • 打赏
  • 举报
回复
首先说 你可能用到的技术 ,多线程 + ajax 或 服务器推技术
-------------------------------------------------------

你现在是使用了线程休眠来显示百分比, 但实际情况可能是 百分比不准确 就是没法准确的获取到进度情况

所以你可以考虑 在上传的过程中显示 gif 图片 或其他等待的动画 直至上传结束



keybows 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 sandy945 的回复:]
你想做的是 在文件上传的时候 显示上传进度 以百分比的形式 是么
[/Quote]恩恩 对的对的!
阿非 2010-07-27
  • 打赏
  • 举报
回复
你想做的是 在文件上传的时候 显示上传进度 以百分比的形式 是么
keybows 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 sandy945 的回复:]
引用 3 楼 keybows 的回复:
引用 2 楼 sandy945 的回复:
form1.submit();
result = window.setInterval("GetValue()",1000);


你先弄清楚这两句
form1.submit()是用post提交到action="upload.aspx"页面这个意思吗?
然后result = window.setInt……
[/Quote]
非哥
我这个思路有错吗?
还有是该在upload.aspx页面执行那句脚本吗?
该怎么写呢?可以在指点下不!
阿非 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 keybows 的回复:]
引用 2 楼 sandy945 的回复:
form1.submit();
result = window.setInterval("GetValue()",1000);


你先弄清楚这两句
form1.submit()是用post提交到action="upload.aspx"页面这个意思吗?
然后result = window.setInterval("GetValue()",10……
[/Quote]

恩,意思是没错。

但是,和你预想的执行是不一样的, 你希望的应该是 页面提交后,每隔1秒 执行一下GetValue 这个函数

可实际是 可能还没执行 GetValue 这个函数 页面就提交,然后 就不再会执行 GetValue 这个函数

而是在服务器端处理结束后 执行 window.parent.message
keybows 2010-07-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sandy945 的回复:]
form1.submit();
result = window.setInterval("GetValue()",1000);


你先弄清楚这两句
[/Quote]非哥 在来帮小弟看看!谢谢了!
keybows 2010-07-27
  • 打赏
  • 举报
回复
真的很急
昨天搞了一天了还是不行
各位大侠帮帮我!
先谢谢了!
加载更多回复(8)

62,074

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧