![]() |
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 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 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); |
Jag har själv haft problem när jag inte fattat vad problemet varit (i PHP då).
Tillslut kom jag på att jag hade glömt <form enctype="multipart/form-data" action="?post" method="POST"> <_< |
context.Request.ContentType = "multipart/form-data; boundary=--------11a9bf2ff31--------21523374577461" så jag tror inte det är problemet.
|
Ser ut som du gör om datan som kommer till base64 ytterligare en gång?
Kod:
string str = Convert.ToBase64String(bytes); Kod:
string str = Convert.FromBase64String(bytes); |
Rätt svar:
Kod:
HttpPostedFile htf = context.Request.Files[0]; |
digiArt:
Det är ju en rätt naturlig lösning, så jag har redan försökt. Problemet är att context.Request.Files är tom... Jake.Nu: Convert.ToBase64String() gör om en byte[] till en string. Citat:
Citat:
Kod:
LS0tLS0tLS0tLTExYTlkOWVhYmI5LS0tLS0tLS0yMTUyMzU0NzUyNTY3MQ0KQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPSJwYXN0ZWRJbWFnZSI7IGZpbGVuYW1lPSJ0aGVGaWxlbmFtZS5qcGciDQp (forts...) För att sammanfatta, det jag får fram ur context.Request.InputStream måste först base64-decodas en gång för att skilja ut headers och själva datan. Denna data måste sedan base64-decodas en gång till för att få själva bilden. Det är lätt att tappa bort sig här... Det konstiga är ju att ASP.NET lyckas tyda headerinformationen, för den finns med i bl.a. context.Request.ContentType och context.Request.Headers, men context.Request.Files är som sagt tom. Någon funktion för konvertering motsvarande den som görs på http://www.toastedspam.com/decode64 har jag inte hittat i .NET, ännu i alla fall. Någon som har fler bra idéer? |
Jag hade också problem med att Request.Files var tom, men sätt ett namn på input-fältet så löser det sig.
|
digiArt, tack för att du engagerar dig, men titta i mitt första inlägg. Efter ett par varv i base64-decodern får jag fram följande
Kod:
----------11a9bf2ff31--------21523374577461 Sedan är ju saken också den att anropet inte kommer från ett vanligt html-formulär, utan en javaapplet. Kan det vara i den änden problemet ligger? |
Borde inte detta funka?
Kod:
StreamReader sra = New StreamReader(context.Request.InputStream, System.Text.Encoding.UTF8); |
Tack för tipset, funcall! Jag får System.ArgumentException "Parametern är inte giltig." när jag provar ditt förslag, men det ger åtminstone några nya uppslag att experimentera vidare med.
Jag har i alla fall lyckats få in filen i context.Request.Files nu... |
Alla tider är GMT +2. Klockan är nu 05:35. |
Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson