NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: ASP.NET dlouhý base64 parametr || upload obrázku z windows phone 8.1 na web.službu

V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Matyáš Černohous:30.11.2015 23:06

Zdravím, chtěl bych se zeptat jestli jak můžu předat hodně dlouhý parametr do webové služby v ASP.NET.
Potřebuji uploadovat obrázek z Windows phone 8.1 na web. Napadlo mě, že ho před odesláním zakóduji do base64 a pak odešlu požadavek s parametrem na webovou službu a tam si ho dekóduji zpátky na obrázek, ale narazil jsem na problém s posláním parametru.

Web. služba vypadá takhle www blalbala. cz/ImageUpload­.aspx?img=myBa­se64string
ale při pokusu o odeslání ale dostávám error "The request URL is too long"

Je nějaký jiný způsob jak předat takhle dlouhý parametr na web.službu ?

Díky :)

Editováno 30.11.2015 23:09
 
Odpovědět
30.11.2015 23:06
Avatar
Matyáš Černohous:1.12.2015 23:21

Tak jsem to vyřešil. Nepoužívám metodu GET, ale POST. Kdyby měl někdo podobný problém tak tady je řešení:

Client side

public Uri connectionUrl = new Uri("http://mojesluzba.cz/upload.aspx");
        static Dictionary<string, string> pairs = new Dictionary<string, string>();

Funkce na convert do Base64

public async Task<string> ImageToBase64(StorageFile MyImageFile)
        {
            Stream ms = await MyImageFile.OpenStreamForReadAsync();
            byte[] imageBytes = new byte[(int)ms.Length];
            ms.Read(imageBytes, 0, (int)ms.Length);

            string base64s = Convert.ToBase64String(imageBytes);
            string a = "ok";
            pairs.Add("img",base64s);
             await AsyncTask();
             return a;

         }

Odeslání pomocí POST
        public async Task AsyncTask()
        {
            HttpFormUrlEncodedContent formContent = new HttpFormUrlEncodedContent(pairs);
            HttpResponseMessage response = await cl.PostAsync(connectionUrl, formContent);
            if (response.IsSuccessStatusCode)
            {
                var dialog = new MessageDialog(response.Content.ToString());
                await dialog.ShowAsync();
}
        }

Server side:

  protected void Page_Load(object sender, EventArgs e)
        {
            var c = HttpContext.Current;
            string ap = c.Request.Form["img"];

            try
            {
                byte[] bytes = Convert.FromBase64String(ap);

                System.Drawing.Image image;
                using (MemoryStream ms = new MemoryStream(bytes))
                {
                   using (image = System.Drawing.Image.FromStream(ms))
                   {
                        image.Save(Server.MapPath("~/App_Data/"+filename+".jpeg"), System.Drawing.Imaging.ImageFormat.Jpeg);

                   }
                }


                Response.Clear();
                Response.Write("Ok");
            }
            catch(Exception ex)
            {
                Response.Clear();
                Response.Write(ex);
            }
}
Editováno 1.12.2015 23:22
 
Nahoru Odpovědět
1.12.2015 23:21
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.