【问题标题】:c# how to write a jpg image from request.binaryreadc# 如何从 request.binaryread 写入 jpg 图像
【发布时间】:2011-07-16 14:50:51
【问题描述】:

我有一个 Flash 应用程序,它将 jpg 图像的原始数据发送到特定的 URL Send.aspx。在 Send.aspx 中,我使用 request.binaryread() 来获取总请求长度,然后将数据读入字节数组。 然后我将数据作为 jpg 文件写入服务器。代码如下:

FileStream f = File.Create(Server.MapPath("~") + "/plugins/handwrite/uploads/" + filename);
            byte[] data = Request.BinaryRead(Request.TotalBytes);

            f.Write(data, 0, data.Length);

            f.Close();

正在创建文件,但其中没有图像。它在任何图形查看器中始终显示为空。我错过了什么部分。在将其写入文件之前,我应该先使用 jpg 编码吗?提前致谢

【问题讨论】:

  • 作为旁注 - 你应该在那里添加一个长度检查 - 否则有人可以通过上传他们的交换文件来拒绝你......当然循环一个 small 缓冲区可以帮助,但不应改变现有解决方案的结果

标签: c# asp.net image request jpeg


【解决方案1】:

好吧,您应该为您的文件流使用using 语句,但除此之外,我觉得它还可以。

关于如何进行的一些建议...

客户端是否有可能没有正确提供数据?也许它以 base64 编码数据的形式提供?

您是否已经从请求正文中读取了一些数据? (这可能会搞砸。)

我建议您仔细查看最终保存的内容与原始文件:

  • 它们的长度相同吗?如果不是,哪个更长?
  • 如果它们的长度相同,它们的 MD5 和是否匹配?
  • 如果您在二进制文件编辑器中查看两者,它们是否完全匹配?有什么明显的区别吗?

【讨论】:

  • 乔恩,感谢您的回复。发送数据的 flash 文件已经正确编码了 jpeg 文件。我用 php 代码对其进行了测试,它能够正确地将原始数据写入 jpg 文件。只有当我在 c# 中编写相同的代码时,我才会得到一个空图像。任何想法都是最受欢迎的。谢谢
  • @amit:你完成了我建议的步骤了吗?您确实需要查看文件以了解其中的区别。
  • 是的。让我检查正在保存的实际文件数据。我会在短时间内回复。
  • Jon 我检查了 php 和 .net 页面中的空白 jpg 的输出。 php 文件生成了一个比 .net 文件多 100 字节的文件。所以我假设.net 应用程序没有获取全部数据。有什么建议吗?
  • @amit:我建议您使用 Wireshark (wireshark.org) 查看网络级别的情况,并将其与 .NET 所看到的情况进行比较。查看内容长度,并检查 .NET 创建的文件的内容是什么样的,而不是“更短”。
猜你喜欢
  • 1970-01-01
  • 2012-05-18
  • 2012-08-20
  • 1970-01-01
  • 2016-05-24
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多