VerySource

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 797|回复: 5

设置Response.ContentType = "application/octet-stream";后下载的文本文件为空字节?请高手帮忙诊断

[复制链接]

1

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
发表于 2020-1-7 17:00:01 | 显示全部楼层 |阅读模式
是这样的,我写了一段下面的代码,下服务器上一个文本文件,现在可以这个文本文件是的确存在的,而且此代码在本地,我其它2台web服务器(win2k3)都ok,只有在其中一台web服务器下载时,文本文件找开为空--没有内容,请大家帮忙!

    private void DownloadTemplate(string filepath)
    {
      
        System.IO.Stream iStream = null;   
        byte[] buffer = new Byte[10000];   
        int length;   
        long dataToRead;      
        string filename = System.IO.Path.GetFileName(filepath);
        try
        {
            if (!System.IO.File.Exists(filepath))
                return;         
            iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);        // Total bytes to read:  
            dataToRead = iStream.Length;
            Response.ContentType = "application/octet-stream";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));      // Read the bytes.   
            while (dataToRead > 0)
            {     // Verify that the client is connected.     
                if (Response.IsClientConnected)
                {      // Read the data in buffer.     
                    length = iStream.Read(buffer, 0, 10000);        // Write the data to the current output stream.      
                    Response.OutputStream.Write(buffer, 0, length);        // Flush the data to the HTML output.      
                    Response.Flush();
                    buffer = new Byte[10000];
                    dataToRead = dataToRead - length;
                }
                else
                {   
                    dataToRead = -1;
                }
            }
        }
        catch (Exception ex)
        {
            showError("", "StyleDef.ascx", "DownloadTemplate", "", "Fail: doing download for stylefile. message:" + ex.Message, "");
         
        }
        finally
        {
            if (iStream != null)
            {     //Close the file.   
                iStream.Close();
            }

            Response.Close();
        }
    }
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-1-7 21:27:01 | 显示全部楼层
调试一下,

如果不能调试加上调试语句.

虽然你说文件肯定存在.

这里还是要检查.
if (!System.IO.File.Exists(filepath))
{

      Response.Write("文件不存在!");
               return;         

}
回复

使用道具 举报

1

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-1-7 21:45:01 | 显示全部楼层
补充一点,此文本文件是的确有内容的,其中两台服务器可以正常下载和显示!只有一台服务器不行,我检查过IIS的设置,也是一样的,会不会是metabase.xml或machine.config中有什么特别的设置没有?
回复

使用道具 举报

1

主题

3

帖子

2.00

积分

新手上路

Rank: 1

积分
2.00
 楼主| 发表于 2020-1-7 22:36:01 | 显示全部楼层
我在本地调试过,完全正常,只有在远程web服务器上不行,而且是某些web服务上不行,程序运行没有错误提示,就是没内容,比较奇怪!
回复

使用道具 举报

0

主题

322

帖子

115.00

积分

新手上路

Rank: 1

积分
115.00
发表于 2020-1-8 00:09:01 | 显示全部楼层
所以要加点调试信息啊.

在所有有分支的地方都加点

如刚才上面的,还是

dataToRead 是否 >0
回复

使用道具 举报

1

主题

60

帖子

37.00

积分

新手上路

Rank: 1

积分
37.00
发表于 2020-1-9 17:54:01 | 显示全部楼层
看看文件获取路径是否正确
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|CopyRight © 2008-2023|verysource.com ( 京ICP备17048824号-1 )

快速回复 返回顶部 返回列表