我正在从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
任何人都可以为此发光。
答案 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();