写二进制文件

时间:2009-10-15 13:38:04

标签: c# .net binary

我正在从iPhone应用程序中读取数据,该应用程序使用http POST将图像传输到服务器我可以将其读入二进制文件并且它写入文件(见下文)我遇到的问题是当我打开它失败了。

你可以在这篇文章中看到Iphone的代码: asp http POST Read Data

代码:

byte[] buffer = new byte[Request.ContentLength];
using (BinaryReader br = new BinaryReader(Request.InputStream))
    br.Read(buffer, 0, buffer.Length);

string fileName = @"C:\test\test.jpg";
FileStream fs = new FileStream(fileName, FileMode.Create, 
    FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write(buffer);
bw.Close();

图像Content-Type是application / octet-stream

任何人都可以为此发光。

2 个答案:

答案 0 :(得分:3)

也许Request.ContentLength设置不正确?我从痛苦的经历中知道,相信它并不总是安全的。 : - (

您可以在不知道长度的情况下阅读流,如下所示:

const int bufferSize = 1024 * 64; // pick any reasonable buffer size
List<byte> buffer = new List<byte>();
using(Stream stream = new BufferedStream(request.InputStream, bufferSize)) {
    int value;
    while((value = stream.ReadByte()) != -1) {
        buffer.Add((byte) value);
    }
}

答案 1 :(得分:1)

以下是否有效?为此,将FileStream更改为MemoryStream

可能会更好
fs.Position = 0;
Bitmap bit_map = Bitmap.FromStream(fs) as Bitmap;
bit_map.Save(@"C:\test\test.jpg");

或者

fs.Position = 0;
Image image = Image.FromStream(fs); 
image.Save(@"C:\test\test.jpg", ImageFormat.Jpeg);

完整示例(使用您的示例,但是如果您想要更改从其他帖子读取二进制数据的方式,那也没关系,只需在您拥有缓冲区后继续):

byte[] buffer = new byte[Request.ContentLength];
using (BinaryReader br = new BinaryReader(Request.InputStream))
    br.Read(buffer, 0, buffer.Length);
MemoryStream mem_stream = new MemoryStream (buffer); 
mem_stream.Write(buffer, 0, buffer.Length); 
mem_stream.Position = 0;
Image image = Image.FromStream(mem_stream); 
image.Save(@"C:\test\test.jpg", ImageFormat.Jpeg);
mem_stream.Close();