Kom ihåg mig?
Home Menu

Menu


Ta emot bild via POST-anrop

 
Ämnesverktyg Visningsalternativ
Oläst 2008-06-19, 15:52 #11
funcall funcall är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2006
Inlägg: 41
funcall funcall är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2006
Inlägg: 41
Vad är det som felar? altså vilken rad?
funcall är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 16:06 #12
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Just nu är läget detta...

Kod:
public void ProcessRequest(HttpContext context)
{
  var httpPostedFile = context.Request.Files[0];
  var path = ... // sökväg för att spara filen
  var streamReader = new StreamReader(httpPostedFile.InputStream, System.Text.Encoding.UTF8);
  var image = Image.FromStream(streamReader.BaseStream);

  try
  {
    image.Save(path);
  }
  catch (Exception e)
  {
    var bitmap = new Bitmap(image);
    bitmap.Save(path);
  }
}
image.Save() i try ger
Kod:
System.Runtime.InteropServices.ExternalException
"Ett allmänt fel uppstod i GDI+."
Däremot funkar bitmap.Save() i catch, och jag får en fil med rätt höjd och bredd, men innehållet är inte riktigt.
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 16:11 #13
funcall funcall är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2006
Inlägg: 41
funcall funcall är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2006
Inlägg: 41
Har du kollat så inputstreamen är UTF8 ?
funcall är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 16:20 #14
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Nej, hur kan jag göra det?

Men jag har provat med alla varianter av Encoding; ASCII, BigEndianUnicode, Default, Unicode, UTF32, UTF7 och UTF8. Det är ingen skillnad alls.
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 16:32 #15
funcall funcall är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2006
Inlägg: 41
funcall funcall är inte uppkopplad
Nykomling
 
Reg.datum: Feb 2006
Inlägg: 41
Ok du kan ju skriva ut och jämföra.

Annars kan du testa
var streamReader = new StreamReader(httpPostedFile.InputStream);
eller
var streamReader = new StreamReader(httpPostedFile.InputStream, true);
funcall är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 17:04 #16
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Troligen fungerar C#-koden jag har nu, men frågan är om bilden kodas på rätt sätt när den sänds från javaappleten.

Jag använder java.awt.image.BufferedImage och beroende på vad jag sätter för imageType i konstruktorn, så får jag olika förvrängda resultat i .NET-applikationen...

Får läsa på och experimentera mera helt enkelt
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 17:09 #17
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
digiArt digiArt är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Jan 2004
Inlägg: 1 429
Kod:
Image im = Bitmap.FromStream(stream);

im.Save(path);
Koden ovan är otestad, det är lite klipp och klistra från en funktion i min egen webbplats.

Det som återstår är att kolla vilken typ av bild som du egentligen tar emot (om det är en bild öht, någon kanske skickar ett worddokument) för att sätta rätt ImageFormat.
digiArt är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-19, 17:29 #18
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
digiArt, det funkar inte. Blir samma fel som jag beskrev i inlägget kl 16.06.

Provade just att läsa in en jpg-fil direkt
Kod:
var originalImage = Image.FromFile(context.Request.PhysicalApplicationPath + "image.jpg");
originalImage.Save(path);
Detta funkar fint.

Jämförde också formatet hos bilderna
Kod:
image.RawFormat.Guid == originalImage.RawFormat.Guid == ImageFormat.Jpeg.Guid
bitmap.RawFormat.Guid == ImageFormat.MemoryBmp.Guid
Tror som sagt att det återstående problemet ligger i javaappleten och hur bilden kodas där innan den skickas.
etanders är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-21, 23:53 #19
Vimp Vimp är inte uppkopplad
Medlem
 
Reg.datum: Aug 2003
Inlägg: 88
Vimp Vimp är inte uppkopplad
Medlem
 
Reg.datum: Aug 2003
Inlägg: 88
Kan du inte skapa upp din request mot sidan du postar till själv i java-applikationen och bara skicka med den informationen som behövs?
Vimp är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-06-23, 11:37 #20
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
etanders etanders är inte uppkopplad
Medlem
 
Reg.datum: Dec 2004
Inlägg: 160
Jo, det är just det jag vill göra (om jag förstår dig rätt).

Mitt första problem var att få till javakoden för requesten så att jag överhuvudtaget kom åt filen i .net-applikationen. Det lyckades till slut.

Mitt problem nu är hur jag ska omvandla mitt java.awt.Image-objekt till någon form av strängrepresentation som kan överföras i requesten och som jag kan lyckas omvandla tillbaka till ett System.Drawing.Image-objekt i .net.

Kod:
// Java
  private void postImage(Image image)
  {
    BufferedImage buffImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    ImageIcon imageIcon = new ImageIcon(image);
    ImageObserver observer = imageIcon.getImageObserver();

    buffImage.getGraphics().setColor(new Color(255, 255, 255));
    buffImage.getGraphics().fillRect(0, 0, width, height);
    buffImage.getGraphics().drawImage(imageIcon.getImage(), 0, 0, observer);

    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    JPEGImageEncoder jpeg = JPEGCodec.createJPEGEncoder(stream);
    jpeg.encode(buffImage);

    URL url = new URL(m_postUrl);
    URLConnection connection = url.openConnection();
      
    String boundary = "--------" + Long.toHexString(System.currentTimeMillis()) + "--------" + Long.toOctalString(System.currentTimeMillis());
    
    connection.setRequestProperty("method", "POST");
    connection.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + boundary);
    
    String output =
        "--" + boundary + "\r\n"
        + "Content-Disposition: form-data; name=\"theFirst\"\r\n"
        + "Content-Type: text/plain\r\n"
        + "Content-Transfer-Encoding: quoted-printable\r\n\r\n"
        + "Testar ett litet meddelande.\r\n"
        + "--" + boundary + "\r\n"
        + "Content-Disposition: form-data; name=\"pastedImage\"; filename=\"theFilename.jpg\"\r\n"
        + "Content-Type: image/jpeg\r\n"
        + "Content-Transfer-Encoding: base64\r\n\r\n"
        + Base64.encode(stream.toByteArray())
        //+ new String(stream.toByteArray())
        + "\r\n"
        + "--" + boundary + "--\r\n";
    
    connection.setDoOutput(true);
    connection.getOutputStream().write(output.getBytes());
    connection.connect();
  }
Jag har provat både med och utan base64-kodning (rad 7 från slutet), men vad jag väljer för argument i första raden (BufferedImage.TYPE_INT_RGB) påverkar resultatet i filen jag till slut får ut i .net. Tips, någon?
etanders är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 06:36.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017