【问题标题】:How to consume posted file via HttpHandler?如何通过 HttpHandler 使用发布的文件?
【发布时间】:2011-09-23 16:49:39
【问题描述】:

我已经构建了一个方法,它获取一个本地文件并将其发布到从 the 2nd answer here. 获取的远程站点

在远程站点上,我有我的 HttpHandler,但不知道文件字节在哪里,所以我可以将它保存在远程计算机上的某个位置。

有人可以帮助我了解如何在 HttpHandler 中使用该文件进行处理吗?我尝试了以下但 Request.Files 为空:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Collections.Specialized;

namespace Somewhere
{
    public class UploadFileHandler : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";

            //VALIDATE FILES IN REQUEST
            if (context.Request.Files.Count > 0)
            {
                //HANDLE EACH FILE IN THE REQUEST
                foreach (HttpPostedFile item in context.Request.Files)
                {
                    item.SaveAs(context.Server.MapPath("~/Temp/" + item.FileName));
                    context.Response.Write("File uploaded");
                }
            }
            else
            {
                //NO FILES IN REQUEST TO HANDLE
                context.Response.Write("No file uploaded");
            }
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

【问题讨论】:

  • Request.Files 不应为空。如果你制作一个只上传文件的小 HTML 页面,并让它将文件发送给你的处理程序,Request.Files还是是空的吗?
  • 为了让这个问题对未来的访问者有用,请解释为什么接受的答案解决了您的问题。 :)

标签: c# asp.net forms http-post httphandler


【解决方案1】:

从上下文中获取HttpRequest,并使用Files 属性获取HttpPostedFile 对象的集合。然后,您可以从 HttpPostedFile.InputStream 访问数据(名称、长度和 MIME 类型还有其他属性)。

编辑:现在问题已经过编辑,表明您已经在使用 Files 属性,我强烈怀疑您正在查看错误的 HTTP 请求,或者您的制作方式有问题请求。我建议您使用Wireshark 来查看网络级别发生的情况 - 这样您就可以检查您的请求真的是否包含文件数据。

【讨论】:

  • 根据问题,“Request.Files 为空”。
  • @bzlm:啊,抱歉——当我开始回答时,那一点不存在。
  • Wireshark 听起来有点矫枉过正。当然Fiddler as a reverse proxy 会更容易看。 :)
  • @bzlm:这是假设当代理插入混合时行为根本不会改变。我更喜欢 Wireshark 的“非干预主义”方法 - 确实不难看出 Follow Stream 发生了什么......
  • 实际上,reverse 代理比普通的正向代理引入了 less heisenbugs,因为客户端不知道并且不适应。在这种情况下,到达 Fiddler 的任何东西都会到达 HTTP 处理程序,对吧?
猜你喜欢
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 2013-09-02
  • 2012-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-07
相关资源
最近更新 更多