Jag kör C#/ASP.NET 3.5 och vill ta emot en uppladdad bild från en källa utanför C#-applikationen. Jag gör ett POST-anrop till en .ashx-sida där jag vill ta hand om bilden för att sedan kunna spara i databasen. Har försökt på olika sätt, men lyckas inte riktigt få till det.
Kod:
// ImageHandler.ashx
public class ImageHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
Stream stream = context.Request.InputStream;
//Image image = Image.FromStream(stream);
byte[] bytes = new byte[stream.Length];
stream.Read(bytes, 0, bytes.Length);
string str = Convert.ToBase64String(bytes);
}
}
Den bortkommenterade raden ger ArgumentException, "Parametern är inte giltig", så det fungerar uppenbarligen inte.
Om jag tar innehållet i str och "decodar" på
http://www.toastedspam.com/decode64 så får jag fram följande
Kod:
----------11a9bf2ff31--------21523374577461
Content-Disposition: form-data; name="myImage"; filename="theFilename.jpg"
Content-Type: image/jpeg
Content-Transfer-Encoding: base64
/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0a
HBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIy
MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCABTAHQDASIA
AhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQA
AAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3
(forts...)
Alltså lyckas ju överföringen i någon mening - det jag vill ha tag på "finns" ju... Men hur gör jag för att få ut datan (i det här fallet bilden) som är kodad här så att jag kan använda den i C#?
EDIT:
Använder man FileUpload-kontrollen i ASP.NET är det självklart inga problem att "hitta" bilden, då funkar det utmärkt med
Kod:
Image image = Image.FromStream(FileUpload1.PostedFile.InputStream);
Men i detta fall kommer alltså POST-anropet inte från ASP.NET-applikationen. Tips på lösningar på motsvarande problem i andra miljöer (t.ex. php) är också intressanta!