2009-10-15 5 views
3

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(); 

이미지 콘텐츠 유형은 응용 프로그램/octet-stream을

입니다 는

는 사람이 어떤 빛나는 수 이 부분에 빛을주십시오.

+0

당신이 응용 프로그램/octet-stream을가 무엇인지 묻는하거나 변경하는 방법 다른 MIME 유형으로 변환 하시겠습니까? –

+0

또한 "실패"함으로 의미합니까? –

+0

내가 실패하면 이미지가 열리지 않을 것입니다. 잘못된 형식입니다. Notpad에서 열어서 헤더와 내용을 볼 수 있습니다. – MartGriff

답변

1

을 수행하는 다음과 같은 일을이 것이 아마 MemoryStream을로하여 FileStream을 변경하는 것이 더 나은 것

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); 

전체 예 (당신이 원하는 경우 예를 사용하지만, 이진 데이터는 다른 게시물에서 읽어 방법을 변경하려면 해당)은 버퍼가 후에서 불과 confinue, 너무 괜찮 :

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(); 
+0

메모리 스트림을 사용하는 방법과 List 데이터를 어떻게 쓰는지 예를 들어 보겠습니까? – MartGriff

+0

코드를 사용하여 데이터를 버퍼로 읽는 예제를 업데이트했습니다. 당신이 원한다면 크리스틴이 쓴 것을 바꿀 수 있습니다. – SwDevMan81

+0

이 링크에서 오류가 발생했습니다 : System.Drawing.Image image = System.Drawing.Image.FromStream (mem_stream); With 유효한 매개 변수가 아닙니다. – MartGriff

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); 
    } 
}