HTTP侦听器接收文件

时间:2015-01-13 09:22:02

标签: c# httplistener

我正在尝试生成一个HTTP侦听器,它将接受一个文件并将其保存到某个位置。

下面的代码看到有东西进来,但是没有保存文件。

如果您能查看代码并让我知道我哪里出错了,我将不胜感激。

class Program
{
    static void Main(string[] args)
    {
        Listener();
    }
    public static void Listener()
    {
        const string prefix = "http://localhost:8082/";
        var listener = new HttpListener();
        listener.Prefixes.Add(prefix);
        try
        {
            listener.Start();
        }
        catch (HttpListenerException hlex)
        {
            return;
        }
        while (listener.IsListening)
        {
            var context = listener.GetContext();
            ProcessRequest(context);
        }
        listener.Close();
    }

    public static void ProcessRequest(HttpListenerContext context)
    {
        var filename = Path.GetFileName(context.Request.RawUrl);
        var path = Path.Combine(@"c:\listenerFiles", filename);

        try
        {
            context.Response.StatusCode = (int)HttpStatusCode.Accepted;
            Console.WriteLine(context.Response.StatusCode = (int)HttpStatusCode.Accepted);
            var receivingFile = File.ReadAllBytes(path);
            Console.WriteLine(receivingFile);
            context.Response.ContentLength64 = receivingFile.Length;
            using (var s = context.Response.OutputStream)
            s.Write(receivingFile, 0, receivingFile.Length);
        }
        catch (Exception e)
        {

            return;
        }


    }

}

当它获取文件时,它抛出的错误读取

UnauthorisedAccessExcetion

访问路径&#c; \ listenerFiles'被拒绝。

1 个答案:

答案 0 :(得分:3)

永远不会在没有处理的情况下发现异常! catch (Exception e){ return; }是被禁止的!

using上使用OutputStream是一个坏主意,因为它位于using之后,因此HTTP处理程序无法在之后进行提取。移除using并查看其是否有效。

同时检查IIS进程是否可以访问文件所在的路径。