FileWebRequest没有返回应该的内容

时间:2013-06-12 19:20:54

标签: c# .net

我正在尝试将文件从我的机器发送到浏览器,以便可以在我正在处理的.NET应用程序中下载它。我正在使用this SO答案中的代码,但我没有使用HttpWebRequest,而是使用FileWebRequest,因为我正在本地计算机上访问该文件。请求如下所示: FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");当我将网址file:///C:/Tmp/new.html复制到浏览器中时,它会为我提供正确的文件。但是当我在代码中使用fileReq.ContentLength时,它总是返回0,这使我相信文件由于某种原因没有被读取。谁能告诉我这里发生了什么?

编辑:这是我的代码,就像我从其他SO问题中说的那样,但我使用的是FileWebRequest而不是HttpWebRequest。

        Stream stream = null;
        int bytesToRead = 10000;
        byte[] buffer = new Byte[bytesToRead];
        try
        {               
            FileWebRequest fileReq = (FileWebRequest)WebRequest.Create(@"file:///C:/Tmp/new.html");
            FileWebResponse fileResp = (FileWebResponse)fileReq.GetResponse();

            if (fileReq.ContentLength > 0)
            {
                fileResp.ContentLength = fileReq.ContentLength;
                stream = fileResp.GetResponseStream();
                var resp = HttpContext.Current.Response;
                resp.ContentType = "application/octet-stream";
                resp.AddHeader("Content-dsiposition", "attachment; filename=" + url);
                resp.AddHeader("Content-Length", fileResp.ContentLength.ToString());

                int length;
                do
                {
                    if (resp.IsClientConnected)
                    {
                        length = stream.Read(buffer, 0, bytesToRead);
                        resp.OutputStream.Write(buffer, 0, length);
                        resp.Flush();
                        buffer = new Byte[bytesToRead];
                    }
                    else
                    {
                        length = -1;
                    }
                } while (length > 0);
            }
        }
        catch (Exception ex)
        {
            FileLabel.Text = ex.Message.ToString();
        }
        finally
        {
            if (stream != null)
            {
                stream.Close();
            }
        }

2 个答案:

答案 0 :(得分:0)

尝试WebClient类。

 public static void Main (string[] args)
{
    if (args == null || args.Length == 0)
    {
        throw new ApplicationException ("Specify the URI of the resource to retrieve.");
    }
    WebClient client = new WebClient ();

    // Add a user agent header in case the 
    // requested URI contains a query.

    client.Headers.Add ("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    Stream data = client.OpenRead (args[0]);
    StreamReader reader = new StreamReader (data);
    string s = reader.ReadToEnd ();
    Console.WriteLine (s);
    data.Close ();
    reader.Close ();

tutorial here

答案 1 :(得分:0)

从这里开始:http://msdn.microsoft.com/en-us/library/12s31dhy(v=vs.110).aspx 此方法只接受文件路径,并为您完成剩下的工作。