【问题标题】:getting byte[] of a file associated with its input name tag asp.net获取与其输入名称标签 asp.net 关联的文件的字节 []
【发布时间】:2012-09-06 20:02:42
【问题描述】:

我有 N 个文件正在上传到此应用程序。每个名称都是唯一的,但我不知道如何根据某个名称获取字节数组。

<input type="file" name="file1" />

并且在服务器上会有类似

的东西
byte[] data = Request.Files["file1"];  //doesnt work, as i believe it wont take a string, but only an int index

当我查找这些解决方案时,FileName 并不真正关心那么多,因此 Files[0].FileName 无济于事,索引也无济于事。我希望能够根据上面的名称引用内容。

我不确定在哪里可以找到这个。正在查看 MSDN 和此处。

我有很多文件,每个文件都有一个唯一的名称....然后根据唯一的名称,其中实际上包含一些附加信息,会告诉我如何处理它。

这似乎不像在 PHP 中那么容易。

【问题讨论】:

  • 请编辑您的示例以便它实际编译 - 项目返回 HttpPostedFile,而不是 byte[] - HttpFileCollection.Item
  • 按名称索引应该可以工作...您确定您的文件正在发布到服务器吗?如果您调试并执行Request.Files.Count 返回什么?
  • 让我检查确认
  • 我的正则表达式是错误的,所以我需要一些时间来调试和修复。试图获得一个将返回括号内数字的正则表达式,但括号中也有可能包含字母。 some[123] 和 some[some1234] 都是需要读取并正确提取数字的东西。

标签: c# asp.net forms post


【解决方案1】:

类似这样的:

  byte[] buffer = new byte[Request.Files["file1"].ContentLength];
  Request.Files["file1"].InputStream.Read(buffer,0,buffer.Length);

并遍历所有这些:

foreach (var item in Request.Files.AllKeys)
{
     byte[] buffer = new byte[Request.Files[item].ContentLength];
     Request.Files[item].InputStream.Read(buffer, 0, buffer.Length);    

     //do something with the byte[] - buffer 
}

更新: 有趣...我刚刚运行了一个测试,如果我将 runat="server" 设置为文件元素,它只会看到填充的 Request.Files 集合:&lt;input type="file" runat="server" name="file1" /&gt;

更新 2:如果您希望能够使用常规 html input:file 元素浏览 Request.Files 集合,请确保在表单上设置 enctype="multipart/form-data"

【讨论】:

  • 这是一个奇怪的更新。那种没有意义,因为它可以发布到任何类型的页面,其中包括 PHP 扩展。
  • @Fallenreaper 真奇怪! :/ 我正在做更多的测试,看看我是否能找出原因......
  • 添加 runat="server" 会将表单更改为 enctype="multipart/form-data"。没有这个,只会发布文件名。
  • @user1429080 你是对的。直到查看渲染的源代码,我才意识到我没有enctype="multipart/form-data。问题是我一直在测试一个只有常规 html 元素的 aspx。
  • @Fallenreaper 被警告:图像数据类型将从 SQL Server 的未来版本中删除。至于存储字节。您应该能够将 byte[] 存储在 image 列中。图像列只存储字节。您不必将其转换为 Image 对象即可在其中存储任何内容。
猜你喜欢
  • 1970-01-01
  • 2020-01-28
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-01
相关资源
最近更新 更多