Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Api per ricevere byte/foto in post

    Ciao a tutti,
    devo creare una web service per ricevere un immagine che un mio collega invia da un APP MOBILE (in java) al mio server (microsoft azure).
    Per fare la web service ho utilizzato e provato varie pagine fatte sia in asp classico che in .net (c#).
    Le mie pagine funzionano correttamente se invio i dati da un form.
    Il dubbi sul non funzionamento sono tanti, non so se non funziona per causa mia o sua.
    Per fare dei test abbiamo usato anche un servizio online ovvero inviando i dati a http://httpbin.org/post e leggendo un json con tutto quello inviato.
    il primo dubbio mi viene sul tipo di content
    io dal form li in invio in "Content-Type": "multipart/form-data;"
    mentre lui li invia in "Content-Type": "application/x-www-form-urlencoded"

    lui mi dice che invia i dati in base64 ma ho visto che anche la risposta del mio form è in base64
    "photo": "data:image/jpeg;base64.....

    mi viene naturalmente il dubbio come detto che la mia web service non sia corretta, ma oltre a degli script miei ne ho presi diversi in rete per scrivere file dopo un post, gli script erano anche in php, uno addirittura scrive qualsiasi byte senza andare a vedere il nome della variabile , ma anche in questo caso nulla

    in asp.net ho creato una pagina che faccio questo
    codice:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using  System.IO;
    
    
    public partial class ApiMobile_UploadFile : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
    
            HttpPostedFile file = Request.Files["photo"];
    
    
    
    
            if (file != null && file.ContentLength > 0)
            {
                string fname = Path.GetFileName(file.FileName);
                file.SaveAs(Server.MapPath(Path.Combine("/public/", fname)));
                testo.InnerHtml = "inserito";
            }
            else
            {
    
    
                testo.InnerHtml = "Non è arrivato nulla";
    
    
            }
    
    
        }
    }
    ma la risposta che lui ha è sempre "Non è arrivato nulla" come se non arrivassero i byte, mentre funziona se la uso dopo una pagina con il form.

    non so se è utile ma vi scrivo anche lui in java che mi dice che fa

    codice:
    public static String getStringImage(Bitmap bmp){
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            byte[] imageBytes = baos.toByteArray();
            String encodedImage = Base64.encodeToString(imageBytes, Base64.DEFAULT);
            return encodedImage;
        }
    ha seguito questo metodo
    https://developer.android.com/refere...il/Base64.html

    non so se le informazioni che vi ho dato sono abbastanza.
    potete darmi qualche consiglio su cosa posso fare io per recuperare i dati?
    Grazie in anticipo

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Ma io non vedo nessuna elaborazione alla ricezione della stringa...

    Ho cercato il tuo problema su SO, vedi se questo thread puo' metterti sulla buona strada..
    http://stackoverflow.com/questions/1...-to-jpeg-image

    c'e' un metodo (c#) per convertire una stringa Base64 in Image. Fai sapere..

    codice:
    public Image Base64ToImage(string base64String)
     {
        // Convert base 64 string to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        // Convert byte[] to Image
        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            Image image = Image.FromStream(ms, true);
            return image;
        }
     }

  3. #3
    Quote Originariamente inviata da djciko Visualizza il messaggio
    Ma io non vedo nessuna elaborazione alla ricezione della stringa...

    Ho cercato il tuo problema su SO, vedi se questo thread puo' metterti sulla buona strada..
    http://stackoverflow.com/questions/1...-to-jpeg-image

    c'e' un metodo (c#) per convertire una stringa Base64 in Image. Fai sapere..

    codice:
    public Image Base64ToImage(string base64String)
     {
        // Convert base 64 string to byte[]
        byte[] imageBytes = Convert.FromBase64String(base64String);
        // Convert byte[] to Image
        using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
        {
            Image image = Image.FromStream(ms, true);
            return image;
        }
     }
    Ciao djciko , intanto grazie per avermi risposto.
    Purtroppo io non ho grandi conoscenze di c#
    Ho usato quello script come quello di php perchè avevo trovato degli esempi in rete.
    Io l'avrei fatto in asp, ma non ci sono riuscito.
    Come detto pensavo che quello che avevo fatto bastasse, dato che con l'invio dal form tutto funzionava.
    Per fare la prova ti devo chiedere una cortesia, ovvero aiutarmi a capire cosa fare.
    Io ho messo un page_load in cui vado a prenderei i byte

    string fname = Path.GetFileName(file.FileName);

    lo passo a Image Base64ToImage(fname)
    e poi faccio il save?

  4. #4
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    No, non credo che ti interessi il nome del file (file name).
    Devi prendere proprio la stringa che genera il suo metodo getStringImage,
    per poi fare l'operazione contraria e ritrasformarla in Image...

    Metti questo metodo nel page_load ed aggiungi l'oggetto (image) derivante ad un placeholder o alla pagina aspx e vedi se ti esce l'immagine.... (sto andando ad intuito, ma mi sa che ad ogni modo devi prendere cio' che ti viene mandato in post)
    Ultima modifica di djciko; 28-06-2016 a 14:25

  5. #5
    Quote Originariamente inviata da djciko Visualizza il messaggio
    No, non credo che ti interessi il nome del file (file name).
    Devi prendere proprio la stringa che genera il suo metodo getStringImage,
    per poi fare l'operazione contraria e ritrasformarla in Image...

    Metti questo metodo nel page_load ed aggiungi l'oggetto (image) derivante ad un placeholder o alla pagina aspx e vedi se ti esce l'immagine.... (sto andando ad intuito, ma mi sa che ad ogni modo devi prendere cio' che ti viene mandato in post)

    Ciao, per ora nulla da fare, ho provato varie soluzioni cercando anche in rete di correggere
    per ora ho scritto questo:

    codice:
      if (file != null && file.ContentLength > 0)
            {
                string fname = Path.GetFileName(file.FileName);
    
    
    
    
                byte[] imageBytes = Convert.FromBase64String(file.ToString());
    
    
                using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
                {
                    Image image = Image.FromStream(ms, true);
                    image.Save(Server.MapPath(Path.Combine("/public/pippo.jpg")), ImageFormat.Jpeg);
                  
                }
    
    
    
    
    
    
                testo.InnerHtml = "inserito";
            }
    ma non va ricevo questo errore

    The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or an illegal character among the padding characters.

    a questa riga
    byte[] imageBytes = Convert.FromBase64String(file.ToString());

  6. #6
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    non lo so, come ti dicevo devi trovare il metodo di passare a quella funzione sopra postata la stringa che ti arriva.

    cosa c'e' in "file" ? posta il codice completo

  7. #7
    Quote Originariamente inviata da djciko Visualizza il messaggio
    non lo so, come ti dicevo devi trovare il metodo di passare a quella funzione sopra postata la stringa che ti arriva.

    cosa c'e' in "file" ? posta il codice completo
    in file provo a mettere i dati che mi arrivano tramite post

    codice:
    using System;
    using System.Collections.Generic;
    using System.Web;
    using System.Web.UI;
    using  System.IO;
    using System.Drawing;
    using System.Drawing.Imaging;
    
    
    
    
    
    
    public partial class ApiMobile_UploadFile : System.Web.UI.Page
    {
    
    
    
    
    
    
        protected void Page_Load(object sender, EventArgs e)
        {
    
    
            HttpPostedFile file = Request.Files["photo"];
    
    
    
    
            if (file != null && file.ContentLength > 0)
            {
                string fname = Path.GetFileName(file.FileName);
              
    
    
                byte[] imageBytes = Convert.FromBase64String(file.ToString());
    
    
                using (var ms = new MemoryStream(imageBytes, 0, imageBytes.Length))
                {
                    Image image = Image.FromStream(ms, true);
                    image.Save(Server.MapPath(Path.Combine("/public/pippo.jpg")), ImageFormat.Jpeg);
                }
    
    
                
    
    
    
    
                testo.InnerHtml = "inserito";
            }
            else
            {
    
    
                testo.InnerHtml = "Non è arrivato nulla";
    
    
            }
    
    
        }
    }

  8. #8
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    e' un problema che non ho mai affrontato, posso darti solo consigli ad intuito.
    quel file.tostring() comunque non mi convince pienamente, e non ho capito qual'e' lo scenario quando ti funziona tramite Form.

    Hai poi detto che e' tramite API, quindi non so se con la Developer console (f12) sezione "network" ti fa vedere cio' che arriva in post, prova, perche' a quanto pare il metodo che converte non gradisce la Stringa in input che gli stai dando.

    mi fermo qui comunque perche' non vorrei portarti fuori strada..

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.