在本地测试上传80M的文件,4秒左右就传完了, 上传服务器,过了几十秒都上传不上去 而且还出现该页无法显示了。
是什么原因????
是什么原因????
解决方案 »
- 麻烦大侠一下。。这个问题实在解决不了。。
- Window 2003构建 4.0环境.
- 请问大家asp.net如何设置keypreview属性。
- 求几个存储过程 最好短小 简练 实用的 先谢谢了
- 新手上路!有关Web界面设计的问题?
- windows workflow funcation 的简单问题
- 郁闷了我几个钟头的Forms身份验证。50分到送。
- 求助,.net的上传组件如何怎么没有enableviewstate属性啊?
- VS2012Web页面JS代码调试不了 进不到断点
- http://eu.webmatrixhosting.net/ 这里的主机集合,用此主机的朋友们来交流一下,怎么样?
- 烦透了.
- 如何用Gridview实现超链接的文件打开效果
上传的是视频格式的东西! flv,mp4,mov 等!
本地测试,你打开360的流量监控看看,几十M/s,当然几秒就上传了。放在服务器,你看看,30KB/S,这能几秒就上传上去吗,至少半个小时。出现无法显示,因为上传过期时间到了,你把过期时间再设置大一点。
上传大小,你是设到最大了,也要把过期时间设置大一点啊。没有办法能它上传快,受本地网张上传影响,如果你是1M网速的,速率也不过是 200KB/S,这还是全部网络由你占有的情况下,但一般,你只能占到70到80。
咱能不能看好了在说,我说的是flv 文件, 图片上传挺块的, 明白么?
谁能给个办法啊!
局域网上传可以达到10M/秒,但外网的上传资源份额是有限的,我们这边的电信上行就控制得很严,只有几十K/s(光纤除外),LZ可以自己找一个工具来测试一下你那边的上行流量,你就明白为什么不能通过网页上传的原因了
FTP要服务器支持才行的吧?
1. 服务器上一般默认上传最大2M,在网站的配置文件里改下
2. 网页默认执行超时是90秒,在CS中加Server.ScriptTimeOut = 3600; 单位秒
上传
断点续传
using System;
using System.Collections.Generic;
using System.Text;
using System.Collections.Specialized;
using System.Net;
using System.Net.Sockets;
using System.IO;
namespace CompleteClient
{
/// <summary>
/// 文件发送工作类
/// </summary>
class PostFile
{
/// <summary>
/// 通过post发送指定文件的指定字段到指定的uri上
/// </summary>
/// <param name="uploadfile">上传文件路径</param>
/// <param name="url">上传的到的URi位置</param>
/// <param name="offset">当前偏移量</param>
/// <param name="size">需要发送的块大小</param>
/// <param name="fileFormName">服务器端"GET"取得的文件名</param>
/// <param name="contenttype">文件类型(保留用)</param>
/// <param name="querystring">GET数组(供服务器用GET取得一些信息)</param>
/// <param name="cookies">本地cookies(保留用)</param>
/// <returns>uri的response的内容以string的形式返回</returns>
public string UploadFileEx(string uploadfile, string url, long offset, long size,
string fileFormName, string contenttype,
NameValueCollection querystring, CookieContainer cookies)
{
if ((fileFormName == null) ||
(fileFormName.Length == 0))
{
fileFormName = "file";
} if ((contenttype == null) ||
(contenttype.Length == 0))
{
contenttype = "application/octet-stream";
} string postdata;
postdata = "?";
if (querystring != null)
{
foreach (string key in querystring.Keys)
{
postdata += key + "=" + querystring.Get(key) + "&";
}
}
Uri uri = new Uri(url + postdata); string boundary = "----------" + DateTime.Now.Ticks.ToString("x");
HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create(uri);
webrequest.CookieContainer = cookies;
webrequest.ContentType = "multipart/form-data; boundary=" + boundary;
webrequest.Method = "POST"; // 构造一个post请求的http头
StringBuilder sb = new StringBuilder();
sb.Append("--");
sb.Append(boundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"");
sb.Append(fileFormName);
sb.Append("\"; filename=\"");
sb.Append(Path.GetFileName(uploadfile));
sb.Append("\"");
sb.Append("\r\n");
sb.Append("Content-Type: ");
sb.Append(contenttype);
sb.Append("\r\n");
sb.Append("\r\n"); string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader); // Build the trailing boundary string as a byte array
// ensuring the boundary appears on a line by itself
byte[] boundaryBytes =
Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); FileStream fileStream = new FileStream(uploadfile,
FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + (long)size +
boundaryBytes.Length;
webrequest.ContentLength = length; Stream requestStream = webrequest.GetRequestStream();
// 写入post头
requestStream.Write(postHeaderBytes, 0, postHeaderBytes.Length); // 写入文件内容
byte[] buffer = new Byte[size];
fileStream.Seek(offset, SeekOrigin.Current);
fileStream.Read(buffer, 0, buffer.Length); requestStream.Write(buffer, 0, buffer.Length); // 写入post请求的尾
requestStream.Write(boundaryBytes, 0, boundaryBytes.Length);
//读取服务器的反馈消息
WebResponse responce = webrequest.GetResponse();
Stream s = responce.GetResponseStream();
StreamReader sr = new StreamReader(s); return sr.ReadToEnd();
}
}
}
我们的网站用户有的可能用的电信的网络,有的用的是联通的网络,有的是用的教育网,有的在南有的在北,这种复杂的网络环境导致他们访问网站的速度是不同的。有的用户网速快,比如电信的用户访问电信的机房肯定快,他上传大文件可能没有问题。但是联通的访问电信的机房可能就慢了,他上传大文件可能就出现上传超时,掉线等问题。服务器负载的问题,现在普通的文件上传技术对服务端带来的压力还是非常大的。普通的HTML上传1G的文件,服务端需要先分配1G的内存,然后开个长连接一直等待客户上传完毕。在这个期间如果有其它的用户也要上传1G的文件,那么服务端就再分配1G的内存。可以想象如果用户多了,那服务器肯定扛不住挂扯。就算是用Flash也一样,比如swfupload还有其它的几个Flash控件,他们使用的技术还是和普通的HTML一样。腾迅他们正是考虑了这个问题,所以使用控件来解决这个问题。他们通过控件将一个大文件,比如1G划分成许多的小块,每一小块大约是128KB,然后循环上传,直到上传完。这样做的优点就是减轻了服务端的压力,提高了服务端的负载能力,使得服务端能够处理的用户请求数多了。也节省了成本。
此控件支持100G文件的断点续传操作,提供了完善的开发文档,支持文件MD5验证,支持文件批量上传。
粘贴文件,简化选择文件操作:文件MD5值计算进度:文件MD5值计算完毕服务器根据MD5检测是否存在相同文件续传文件从服务器加载文件列表文件上传中文件上传完毕上传文件夹与Discuz!X2整合-后台安装断点续传控件与Discuz!X2整合-后台启用断点续传控件与Discuz!X2整合-后台断点续传控件启用成功与Discuz!X2整合-前台发帖页面与Discuz!X2整合-上传
页面调用示例代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>HTTP断点续传控件与MySQL数据库演示页面(UTF-8)</title>
<link href="HttpUploader/HttpUploader.css" type="text/css" rel="Stylesheet"/>
<script type="text/javascript" charset="utf-8" src="HttpUploader/FileLister.js"></script>
<script type="text/javascript" charset="utf-8" src="HttpUploader/HttpUploader.js"></script>
<script type="text/javascript" charset="utf-8" src="HttpUploader/combinbox.js"></script>
<script type="text/javascript" src="HttpUploader/jquery-1.3.2.min.js"></script>
<script language="javascript" type="text/javascript">
var cbItemLast = null;
var cbMgr = new CombinBoxMgr(); $(document).ready(function()
{
cbMgr.LoadInControl("FilePanel");
cbMgr.Init();
});
</script>
</head>
<body>
<div id="FilePanel"></div>
</body>
</html>资源下载:
CAB安装包
开发文档
ASP.NET-ACCESS示例
ASP.NET-SQL2005示例
JSP-ACCESS-GB2312示例
JSP-ACCESS-UTF8示例
JSP-SqlServer2005-UTF8示例
JSP-MySQL-UTF8示例
PHP-MySQL-UTF8示例