【问题标题】:HTTP Listener to receive file接收文件的 HTTP 侦听器
【发布时间】:2015-03-11 04:50:36
【问题描述】:

我正在尝试生成一个 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;
        }


    }

}

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

未授权访问异常

对路径“c:\listenerFiles”的访问被拒绝。

【问题讨论】:

  • 您为什么不在try/catch 中报告任何异常情况?你可能会得到一个错误,然后默默地吞掉它。
  • 我没有看到任何保存文件的代码。我看到读取文件并将其发送给调用者的代码
  • 我刚刚添加了我得到的错误
  • @PanagiotisKanavos 我需要怎么做才能在此处保存文件,因为当我调试并进入时文件名当前为空
  • @SimonPrice 你试过自己写东西吗?要求 Internet 为您转换代码是不受欢迎的。至少尝试读取请求流并使用 File.WriteXXX 写入它

标签: c# httplistener


【解决方案1】:

永远不要在未处理的情况下捕获异常! catch (Exception e){ return; } 是被禁止的!

OutputStream 上使用using 是个坏主意,因为它在using 之后被释放,所以HTTP 处理程序之后无法拾取它。删除using 看看是否有效。

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

【讨论】:

  • 注意 OP 询问 storing 文件,但代码 reads 文件。
  • @PanagiotisKanavos:我猜他的意思是“接收客户”。那么代码正是他所要求的。
  • 这不是我的标准风格,我现在只是使用它在断点处捕获它以轻松查看错误
  • 我没有粗鲁。我指出您需要先尝试解决问题。复制别人的代码并要求 SO 修复它被认为是违反 SO 准则,而不是礼貌的提问方式。请注意,我还没有否决这个问题。我还指出了 cmets 中的许多提示,您可以自己编写代码。只需检查 Request 对象的文档,并尝试在其中找到 Stream。然后使用 File.WriteXXX 方法之一将内容写入磁盘
  • 我同意 Panagiotis。你需要先把你的问题弄清楚。我的回答是基于您提供的信息,并证明不是您想要的。附上你的问题+尝试的更新版本,我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
相关资源
最近更新 更多