NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

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.

Jak se ti líbí článek?
Před uložením hodnocení, popiš prosím autorovi, co je špatněZnaků 0 z 50-500
Jak se ti kurz líbí?
Tvé hodnocení kurzuZnaků 0 z 50-500
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.