B
bbla32
How to downloaded a JPEG image from server? I use the collowing
statements:
using (Stream stream = web.OpenRead(link)) {
long len = -1;
bool ok = true;
string s = web.ResponseHeaders["Content-Type"];
if (s != null && s != "image/jpeg")
ok = false;
s = web.ResponseHeaders["Content-Length"];
if (s != null)
len = int.Parse(s);
if (ok && (len == -1 || len > 4)) {
using (StreamReader sr = new StreamReader(stream)) {
int HEADER = 6;
sr.Read(buffer, 4, HEADER);
1 >>>
//if (buffer[0] == 0xFF &&
// buffer[1] == 0xD8 &&
// buffer[2] == 0xFF &&
// buffer[3] == 0xE0) {
if (buffer[4] == 0x00 &&
buffer[5] == 0x10 &&
buffer[6] == 0x4A &&
buffer[7] == 0x46 &&
buffer[8] == 0x49 &&
buffer[9] == 0x46) {
// download
HEADER += 4;
2 >>>
buffer[0] = (char) 0xFF;
buffer[1] = (char) 0xD8;
buffer[2] = (char) 0xFF;
buffer[3] = (char) 0xE0;
int dloaded = sr.Read(buffer, HEADER, bufferSize -
HEADER);
dloaded += HEADER;
using (StreamWriter sw = new StreamWriter(fname)) {
while (true) {
sw.Write(buffer, 0, dloaded);
if (dloaded != bufferSize) break;
dloaded = sr.Read(buffer, 0, bufferSize);
}
sw.Close();
}
....
The response stream does not seem to contain (1) the Start Of Image
(FF D8) and JFIF (FF E0) markers! So I cannot save the stream directly
to disk. That's what's the (2) hack for, but it does not write the
given bytes, for example instead of FF it writes C3 BF. I guess it's
due to Unicode but I don't know how to make it work. sw.Write does not
support writing bytes.
Similarly, the stream does not contain End Of Image (FF D9) marker.
What else is it missing?
Lukasz
statements:
using (Stream stream = web.OpenRead(link)) {
long len = -1;
bool ok = true;
string s = web.ResponseHeaders["Content-Type"];
if (s != null && s != "image/jpeg")
ok = false;
s = web.ResponseHeaders["Content-Length"];
if (s != null)
len = int.Parse(s);
if (ok && (len == -1 || len > 4)) {
using (StreamReader sr = new StreamReader(stream)) {
int HEADER = 6;
sr.Read(buffer, 4, HEADER);
1 >>>
//if (buffer[0] == 0xFF &&
// buffer[1] == 0xD8 &&
// buffer[2] == 0xFF &&
// buffer[3] == 0xE0) {
if (buffer[4] == 0x00 &&
buffer[5] == 0x10 &&
buffer[6] == 0x4A &&
buffer[7] == 0x46 &&
buffer[8] == 0x49 &&
buffer[9] == 0x46) {
// download
HEADER += 4;
2 >>>
buffer[0] = (char) 0xFF;
buffer[1] = (char) 0xD8;
buffer[2] = (char) 0xFF;
buffer[3] = (char) 0xE0;
int dloaded = sr.Read(buffer, HEADER, bufferSize -
HEADER);
dloaded += HEADER;
using (StreamWriter sw = new StreamWriter(fname)) {
while (true) {
sw.Write(buffer, 0, dloaded);
if (dloaded != bufferSize) break;
dloaded = sr.Read(buffer, 0, bufferSize);
}
sw.Close();
}
....
The response stream does not seem to contain (1) the Start Of Image
(FF D8) and JFIF (FF E0) markers! So I cannot save the stream directly
to disk. That's what's the (2) hack for, but it does not write the
given bytes, for example instead of FF it writes C3 BF. I guess it's
due to Unicode but I don't know how to make it work. sw.Write does not
support writing bytes.
Similarly, the stream does not contain End Of Image (FF D9) marker.
What else is it missing?
Lukasz