0

IIS7 を使用して次のオペレーティング システムで http 要求を介してビデオ ファイルをダウンロードしようとすると、問題が発生します: win2008 32Bit、Win2008 R2 64Bit

現在正常に動作しています: win2003 , vista64 (IIS6)

問題の説明: ユーザーが C# を介して 256 MB を超えるファイルを要求すると、Content-Length パラメータを使用している場合でも、制限されたファイルが取得されます。

ファイルの URL を要求すると、完全なファイルが取得されます。問題は C# スクリプトを介してのみ発生し、完全なバッファがユーザーに送信されたという C# 応答も発生します。

記事の IIS7 設定を変更しました。

http://blog.twinharbor.com/2011/07/28/fixing-iis7-maximum-upload-size/

それでもうまくいきません。

また、どこにも指摘や誤りはありません。

私のコードのサンプルを見つけてください:

var context = System.Web.HttpContext.Current; 
context.Response.ContentEncoding = Encoding.GetEncoding("windows-1255");
context.Response.HeaderEncoding = Encoding.GetEncoding("UTF-8");
context.Response.Charset = "utf-8";
System.IO.Stream iStream = null;

// Buffer to read 100K bytes in chunk:
byte[] buffer = new Byte[100000];

// Length of the file:
int length=0;

// Total bytes to read:
long dataToRead=0;

// Identify the file to download including its path.
string filepath = u.Trim(BigFile);

// Identify the file name.
string filename = System.IO.Path.GetFileName(filepath);

Start.Value = u.Time();

try
{
    iStream = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
    dataToRead = iStream.Length;

    context.Response.Charset = "";
    context.Response.ContentType = "application/octet-stream";    

    context.Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);
    context.Response.AddHeader("Content-Length", dataToRead.ToString());

    while (dataToRead > 0)
    {
        if (context.Response.IsClientConnected)
        {
            length = iStream.Read(buffer, 0, 100000);

            context.Response.OutputStream.Write(buffer, 0, length); 
            context.Response.Flush(); 
            buffer = new Byte[100000];
            dataToRead = dataToRead - length;
        }
        else
        {
            dataToRead = -1;
        }
    }
}
catch (Exception ex)
{
    context.Response.Write("Error : " + ex.Message);
}
finally
{
    if (iStream != null)
    {
        iStream.Close();
    }
    context.Response.Close();
}

よろしくお願いします。ありがとう。

4

0 に答える 0