环境:公司内网。ASP网站使用iis架设在http://192.168.3.30:8060上,用户需要登陆网站后点击下载按钮下载\\10.100.10.100\company文件服务器上的文件aaa.zip。求下载文件按钮事件的写法?
本人刚接手此网站的维护,PC地址在192.168.3.150,使用visual Studio 2010进行编写。找到CSDN大神分享的下载方式,代码如下:
//WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.zip";//客户端保存的文件名
string filePath = @“\\10.100.10.100\company”+ fileName;
//↑此处原作者使用的是Server.MapPath("DownLoadpath"),但是如果我这样写本地调试会认为路径不存在 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize]; Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
iStream.Close();
Response.End();
}
else 弹出窗口:文件不存在
}本地调试时是可以打开浏览器自带下载器并正常完成下载,只是文件较大时下载过程中页面其他按钮点击没有反应,猜想是因为没有使用异步下载?(VS2010应该也不支持异步下载吧?)
调试完成后将网站发布到服务器,然后远程登陆网站并点击下载按钮却会提示文件不存在。我有远程连接到服务器电脑并直接在资源管理器输入\\10.100.10.100是可以打开路径的。不知道为什么发布到服务器上会提示文件不存在。总结问题:
1.代码发布到服务器上为何就无法实现下载了?如何修改?
2.如果可以请告诉我如何解决下载过程中页面按钮点击没有反应?
本人刚接手此网站的维护,PC地址在192.168.3.150,使用visual Studio 2010进行编写。找到CSDN大神分享的下载方式,代码如下:
//WriteFile分块下载
protected void Button3_Click(object sender, EventArgs e)
{
string fileName = "aaa.zip";//客户端保存的文件名
string filePath = @“\\10.100.10.100\company”+ fileName;
//↑此处原作者使用的是Server.MapPath("DownLoadpath"),但是如果我这样写本地调试会认为路径不存在 System.IO.FileInfo fileInfo = new System.IO.FileInfo(filePath); if (fileInfo.Exists == true)
{
const long ChunkSize = 102400;//100K 每次读取文件,只读取100K,这样可以缓解服务器的压力
byte[] buffer = new byte[ChunkSize]; Response.Clear();
System.IO.FileStream iStream = System.IO.File.OpenRead(filePath);
long dataLengthToRead = iStream.Length;//获取下载的文件总大小
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName));
while (dataLengthToRead > 0 && Response.IsClientConnected)
{
int lengthRead = iStream.Read(buffer, 0, Convert.ToInt32(ChunkSize));//读取的大小
Response.OutputStream.Write(buffer, 0, lengthRead);
Response.Flush();
dataLengthToRead = dataLengthToRead - lengthRead;
}
Response.Close();
iStream.Close();
Response.End();
}
else 弹出窗口:文件不存在
}本地调试时是可以打开浏览器自带下载器并正常完成下载,只是文件较大时下载过程中页面其他按钮点击没有反应,猜想是因为没有使用异步下载?(VS2010应该也不支持异步下载吧?)
调试完成后将网站发布到服务器,然后远程登陆网站并点击下载按钮却会提示文件不存在。我有远程连接到服务器电脑并直接在资源管理器输入\\10.100.10.100是可以打开路径的。不知道为什么发布到服务器上会提示文件不存在。总结问题:
1.代码发布到服务器上为何就无法实现下载了?如何修改?
2.如果可以请告诉我如何解决下载过程中页面按钮点击没有反应?
{
if (string.IsNullOrWhiteSpace(clientFileName))
{
clientFileName = fullPath;
}
clientFileName = System.IO.Path.GetFileName(clientFileName);
clientFileName = System.Web.HttpUtility.UrlEncode(clientFileName, System.Text.Encoding.UTF8);
if (clientFileName != null)
{
clientFileName = clientFileName.Replace("+", "%20"); using (System.IO.Stream stream = new System.IO.FileStream(fullPath, System.IO.FileMode.Open))
{
System.Web.HttpContext.Current.Response.Clear();
System.Web.HttpContext.Current.Response.ContentType = "application/octet-stream";
System.Web.HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + clientFileName);
System.Web.HttpContext.Current.Response.AddHeader("Content-Length", stream.Length.ToString(CultureInfo.InvariantCulture)); int index = 0;
int length = 2048;
long dataLength = stream.Length;
if (length > dataLength)
length = (int)dataLength;
byte[] data = new byte[length];
while (stream.Read(data, index, length) > 0)
{
System.Web.HttpContext.Current.Response.OutputStream.Write(data, index, length);
System.Web.HttpContext.Current.Response.OutputStream.Flush();
dataLength -= length;
if (length > dataLength)
length = (int)dataLength;
data = new byte[length];
}
}
} System.Web.HttpContext.Current.Response.End();
}
建议还是换成FTP服务器传文件吧