C# 将图像从WIndows phone 8.1上载到web

C# 将图像从WIndows phone 8.1上载到web,c#,asp.net,.net,windows-phone-8.1,windows-phone,C#,Asp.net,.net,Windows Phone 8.1,Windows Phone,我想问一下如何从WindowsPhone8.1上传图像。 我的解决方案是使用Base64解码,但我认为,这不是最好的方法 在我的Windows Phone 8.1应用程序中,我选择图像,然后选择将图像解码为base64。我的想法是将这个base64字符串作为如下参数发送到我的WebService www.myservice.com/ImageUpload.aspx?img=myBase64String 并在服务器上将其解码回图像文件并上传到服务器 但是 此base64字符串太长,因此webs

我想问一下如何从WindowsPhone8.1上传图像。 我的解决方案是使用Base64解码,但我认为,这不是最好的方法

在我的Windows Phone 8.1应用程序中,我选择图像,然后选择将图像解码为base64。我的想法是将这个base64字符串作为如下参数发送到我的WebService

 www.myservice.com/ImageUpload.aspx?img=myBase64String
并在服务器上将其解码回图像文件并上传到服务器

但是 此base64字符串太长,因此webservice返回错误“请求URL太长”

还有一种方法可以从WindowsPhone8.1将图像文件上传到web

哪一个更好。将图像以base64字符串或BLOB形式保存到数据库。 谢谢

编辑:

Windows phone中的请求:

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 base64Image = Convert.ToBase64String(imageBytes);
            string url = "http://mobil.aspone.com/ImageUpload.aspx?Id=" + base64Image;
            HttpClient client = new HttpClient();
            var response = await client.GetAsync(new Uri(url));
            var result = await response.Content.ReadAsStringAsync();
            string jsonString = result.ToString();
            return jsonString;
    }

您可以使用HttpMultipartContent类从windows phone上载并在服务器端获取它

HttpMultipartFormDataContent form = new HttpMultipartFormDataContent();
                    var stream = await PickedFile.OpenAsync(FileAccessMode.Read);
                    form.Add(new HttpStreamContent(stream), "image");
                    var Response = await new HttpClient().PostAsync(new Uri(StringUtility.UploadImageUrl), form);

PickedFile是此处的StorageFile。这段代码使用起来非常简单,我发现它比我自己转换成字节数组更容易。您需要从服务器端获取此文件。希望这有帮助。

您可以使用HttpMultipartContent类从windows phone上传,并在服务器端获取

HttpMultipartFormDataContent form = new HttpMultipartFormDataContent();
                    var stream = await PickedFile.OpenAsync(FileAccessMode.Read);
                    form.Add(new HttpStreamContent(stream), "image");
                    var Response = await new HttpClient().PostAsync(new Uri(StringUtility.UploadImageUrl), form);


PickedFile是此处的StorageFile。这段代码使用起来非常简单,我发现它比我自己转换成字节数组更容易。您需要从服务器端获取此文件。希望这有帮助。

如果URL太长,为什么不将其放在请求的正文中?在正文中?我该怎么做?你能解释一下还是举个例子?我从来没有向Body提出过请求,你一开始还没有展示过你是如何提出请求的。更新您的代码以显示这一点,然后向您展示如何将数据放入body.Post已更新,因此您使用的是HttpClient库。它有一个
PostAsync
方法,允许您将对象添加为请求正文的一部分。看一下,哪些应该给你一个如何使用它的想法。顺便说一下,图像不是基于64的字符串,所以对我来说,将它们作为字节数组进行传输和存储更有意义。这将减少不必要的转换。如果URL太长,为什么不将其放在请求的正文中?在正文中?我该怎么做?你能解释一下还是举个例子?我从来没有向Body提出过请求,你一开始还没有展示过你是如何提出请求的。更新您的代码以显示这一点,然后向您展示如何将数据放入body.Post已更新,因此您使用的是HttpClient库。它有一个
PostAsync
方法,允许您将对象添加为请求正文的一部分。看一下,哪些应该给你一个如何使用它的想法。顺便说一下,图像不是基于64的字符串,所以对我来说,将它们作为字节数组进行传输和存储更有意义。这将减少不必要的转换量。谢谢,但我得到了以下错误:{System.ArgumentException:值不在预期范围内。at System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(Task Task)…应用程序在这一行崩溃:var Response=Wait new HttpClient().PostAsync(新Uri(StringUtility.UploadImageUrl),form);我不知道为什么……在设置传递的数据的内容长度时会发生这种情况。[按照以下步骤使用Request.files上载和获取文件如果上一个链接对您不起作用,这里再次显示:
System.ArgumentException
at
PostAsync
可能是因为您的文件为空(长度为零)。是Silverlight还是Runtime?谢谢,但我发现了以下错误:{System.ArgumentException:值不在预期范围内。在System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task Task)…此行应用程序崩溃:var Response=await new HttpClient().PostAsync(新Uri(StringUtility.UploadImageUrl),form);我不知道为什么……这可能是在设置传递的数据的内容长度时发生的。[按照以下步骤使用Request.files上载和获取文件如果上一个链接对您不起作用,这里再次说明:
System.ArgumentException
at
PostAsync
可能是您的文件为空(零长度).是Silverlight还是Runtime?