HTML5异步文件上传,上传流始终无效

2024-01-06

我正在尝试调试我不久前构建的异步文件上传器,它不再工作,我已经花了很多时间但没有成功。

服务器接收的流总是损坏,事实上我保存的文件(图像)无法打开。

为了简化调试,我设置了一个全新的 ASP.NET 项目,其中包含两个主要文件:带有表单字段的 HTML 文件和 ASP.NET 处理程序。

尽管这里的代码非常简单,但我仍然不走运! :(

非常感谢任何帮助,非常感谢!

<!DOCTYPE html>
<html>
<head>
    <title>Upload Files using XMLHttpRequest - Minimal</title>

    <script type="text/javascript">

      function uploadFile() {
        var fd = new FormData();
        fd.append("fileToUpload", document.getElementById('fileToUpload').files[0]);
        var xhr = new XMLHttpRequest();

        xhr.addEventListener("load", uploadComplete, false);
        xhr.addEventListener("error", uploadFailed, false);
        xhr.addEventListener("abort", uploadCanceled, false);
        xhr.open("POST", "Handler1.ashx");
        xhr.send(fd);
      }

      function uploadComplete(evt) {
        /* This event is raised when the server send back a response */
        alert(evt.target.responseText);
      }

      function uploadFailed(evt) {
        alert("There was an error attempting to upload the file.");
      }

      function uploadCanceled(evt) {
        alert("The upload has been canceled by the user or the browser dropped the connection.");
      }
    </script>
</head>
<body>
  <form id="form1" enctype="multipart/form-data" method="post" action="Handler1.ashx">

      <input type="file" name="fileToUpload" id="fileToUpload"/>
      <input type="button" onclick="uploadFile()" value="Upload" />

  </form>
</body>
</html>

这是 ashx 处理程序:

using System;
using System.Collections.Generic;
using System.Web.Extensions;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
namespace MultipleFileUploadTest
{
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    public class Handler1 : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            var stream = context.Request.InputStream;

            MemoryStream memoryStream;

            ReadFully(stream, out memoryStream);

            Byte[] ba = memoryStream.ToArray();


            var path = @"C:\Users\giuseppe.JHP\Desktop\Image upload test\uploaded.gif";


            using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
            {
                fs.Write(ba, 0, ba.Length);
            }

            //DEBUGGING CODE
            //I'm opening the same file that was originally picked by the input form field and I'm now comparing the original file with the one received within the context stream. They always differ!
            Byte[] ba2 = File.ReadAllBytes(@"C:\Users\giuseppe.JHP\Desktop\Image upload test\a.gif");

            //equal evaluates always to false
            bool equal = ba.Length == ba2.Length;

            if (equal)
            {
                for (var i = 0; i < ba2.Length; i++)
                {
                    if (ba[i] != ba2[i])
                    {
                        equal = false;
                        i = ba2.Length;
                    }
                }

            }

            //equal is always false
            //if (!equal)
            //{
            //   throw Exception("Stream is not valid");
            //}
            //The code below will throw a Parameter is invalid exception
            //System.Drawing.Image mediaObject = System.Drawing.Image.FromStream(memoryStream);


            memoryStream.Close();
        }

        public static void ReadFully(Stream input, out MemoryStream ms)
        {
            ms = new MemoryStream();
            byte[] buffer = new byte[16 * 1024];

            int read;
            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }
        }
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}

如果它对其他人有帮助,我已经让代码可以工作,以下是更改的内容:

    public void ProcessRequest(HttpContext context)
    {
        if (context.Request.Files != null && context.Request.Files.Count > 0)
        {
            var file = context.Request.Files[0];

            file.SaveAs(@"C:\Users\giuseppe.JHP\Desktop\Image upload test\uploaded.gif");
        }
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTML5异步文件上传,上传流始终无效 的相关文章

随机推荐

  • Docker 组合 |虚拟主机

    我的代码有什么问题吗 提前致谢 我正在尝试为我的 docker 容器设置虚拟主机 在 localhost 8000 上工作正常 但是当我尝试通过 http borgesmelo local 访问时 出现错误 ERR NAME NOT RES
  • OpenGL 中的恒定游戏速度与 GLUT 中的可变 FPS 无关?

    我一直在读科恩 维特斯详细文章 http www koonsolo com news dewitters gameloop 关于不同的游戏循环解决方案 但我在使用 GLUT 实现最后一个解决方案时遇到了一些问题 这是推荐的解决方案 在阅读了
  • 如何编写 CSS 选择器来选择不具有特定属性的元素?

    如何编写 CSS 选择器来选择不具有特定属性的元素 我有2个 div 节点如下 First div class weEq5 div div
  • Chrome 时间线 - 如何确定“重新计算样式”日志条目的原因?

    使用 Chrome 中的内置时间线记录器分析页面时 我看到重复的 重新计算样式 条目 它们没有明显的信息将它们链接到 DOM 元素或事件 我怎样才能最好地确定这些条目的原因 已发布的用于调查的 jQuery 版本的替代方案是控制台中的简单一
  • 为什么会出现 TypeError: 'str' object不能被解释为整数?

    我正在做OrderedDict的练习 我正在尝试使用 input rsplit 方法为字典分配值 发生了一个错误 名为 TypeError str 对象无法解释为整数 我哪里搞错了 from collections import Order
  • 在生产环境中使用代码优先降级(回滚)数据库

    我有一个网络应用程序 安装在客户的计算机上供他们内部使用 我使用 C MVC5 和代码优先的实体框架 我使用了自动迁移 true 但我停止并将其设置为 false 我将其安装在生产环境 发行版 上 使用部署包 无 Visual Studio
  • TailwindCSS中的transition-all和transition有什么区别

    Tailwind 提供了多个实用程序来控制 CSS 属性转换 其中有transition and transition all 我检查了这两个类的 CSS 属性 这里它们的顺序相同 transition property backgroun
  • 检测声音是否在 Selenium 中播放

    我在我正在开发的项目的 iframe 中加载了一些第三方网站 但我需要以某种方式检测这些网站是否正在播放任何声音 我没有看到任何使用 WebDriver 的方法来查看浏览器中是否正在播放声音 是否有其他方法来查询虚拟机本身 在现代 HTML
  • 如何通过 decltype 声明迭代器的值

    在 C 98 中 我通常使用以下代码来声明迭代器值类型中的变量 typename std iterator traits
  • 在 python 中对局部变量使用显式 del

    使用显式的最佳实践和建议是什么delpython 中的语句 我知道它用于删除属性或字典 列表元素等 但有时我看到它在代码中的局部变量上使用 如下所示 def action x result None something produce so
  • Go数组初始化

    func identityMat4 16 float return 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 我希望你能从这个例子中明白我想要做什么 我如何在 Go 中执行此操作 func identityMat4 1
  • 递增:x++ 与 x += 1

    我读到 为了清楚起见 许多开发人员使用 x 1 而不是 x 我知道 x 对于新开发人员来说可能会含糊不清 而 x 1 总是更清晰 但是两者之间的效率有什么区别吗 使用 for 循环的示例 for x 0 x lt 1000 x 1 vs f
  • 在Python中删除文件行

    我正在尝试创建一个接受用户名和高分的程序 如果他们已经是用户 他们会更新到新的高分 或者如果不是 则仅添加高分 我的代码是 try a open data r except FileNotFoundError a open data w a
  • 有没有办法允许用户从网站复制文本,并且文本不格式化?

    几乎只是一个问题 我有一个客户要求在整个网页上使用几乎白色文本的负片设计 但测试人员表示 从网站复制和粘贴很烦人 因为复制到 Word 等内容时 所有内容都显示为白色文本 当用户尝试从网站复制文本时 是否有办法预先删除格式 或者有没有办法劫
  • javax.servlet.http.Cookie 的 getDomain() 返回 null

    如何获取 cookie 的实际域 getDomain getPath 返回 null 我也设置了适当的值 我正在使用response addCookie cookie 提前致谢 问候 普拉尚特 饼干来了in从浏览器可能没有可用的数据 只有
  • Spring Hibernate 模板何时使用以及为什么?

    问候 目前正在开发小型 Web 服务应用程序 其中来自 Web 服务 使用 CXF Spring 的响应被处理并保存到数据库 为了使用数据库 我使用 Hibernate 3 5 在网上浏览一些Hibernate Spring的例子 我经常可
  • 部署 Apache Camel 应用程序时出现警告

    当我将应用程序部署到 GlassFish 时 我看到以下警告 WARN AnnotationTypeConverterLoader Ignoring converter type org apache activemq camel conv
  • valgrind 在使用 libcurl 时检测内存泄漏(无 ssl)

    在我的 C 程序中 我使用 libcurl 的一些基本函数 今天我运行 valgrind 来检查是否存在内存泄漏 并且 valgrind 疯狂地报告了多个错误 我基本上追踪到 CURL curl CURLcode res curl curl
  • 当实体包含 UUID 时,H2 数据库的 Hibernate 数据库模式验证失败

    For a H2数据库架构映射到具有 UUID 的实体 the Hibernate ddl 验证失败与例外 根本原因 org hibernate tool schema spi SchemaManagementException 架构验证
  • HTML5异步文件上传,上传流始终无效

    我正在尝试调试我不久前构建的异步文件上传器 它不再工作 我已经花了很多时间但没有成功 服务器接收的流总是损坏 事实上我保存的文件 图像 无法打开 为了简化调试 我设置了一个全新的 ASP NET 项目 其中包含两个主要文件 带有表单字段的