2013-03-16 3 views
0

Я пытаюсь разработать приложение для Windows Phone на C#, которое в основном загружает выбранное пользователем изображение на сервер (например, localhost). Это приложение предназначено для работы так же, как сценарий загрузки файлов PHP, где пользователь выбирает файл, а затем он загружается в нужный каталог на сервере.Как загрузить выбранную фотографию с Windows Phone

Я уже написал код для выбора изображения с помощью задачи Picture Chooser. Но теперь я совершенно смущен. Я просто не знаю, что делать с выбранным изображением.

Это код страницы, которая запрашивает у пользователя, чтобы выбрать изображение:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Net; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Documents; 
using System.Windows.Input; 
using System.Windows.Media; 
using System.Windows.Media.Animation; 
using System.Windows.Shapes; 
using Microsoft.Phone.Controls; 
using Microsoft.Phone.Tasks; 
using System.IO; 
using System.Windows.Media.Imaging; 


namespace QR_Reader 
{ 
    public partial class SamplePage : PhoneApplicationPage 
    { 
     public SamplePage() 
     { 
      InitializeComponent(); 
     } 

     PhotoChooserTask selectphoto = null; 

     private void SampleBtn_Click(object sender, RoutedEventArgs e) 
     { 
      selectphoto = new PhotoChooserTask(); 
      selectphoto.Completed += new EventHandler<PhotoResult>(selectphoto_Completed); 
      selectphoto.Show(); 
     } 

     void selectphoto_Completed(object sender, PhotoResult e) 
     { 
      if (e.TaskResult == TaskResult.OK) 
      { 

       BinaryReader reader = new BinaryReader(e.ChosenPhoto); 
       image1.Source = new BitmapImage(new Uri(e.OriginalFileName)); 
       txtBX.Text = e.OriginalFileName; 
      } 
     } 

    } 
} 

Пожалуйста, помогите мне.

Здесь txtBX представляет собой текстовое поле, отображающее путь к выбранному изображению.

+0

«Я просто не знаю, что делать с выбранным изображением.» - предположительно вам нужно написать код загрузки ... –

+0

Да, точно! Но я не знаю, с чего начать. –

ответ

1

Что вы планируете загружать с изображениям, вот вопрос. Here - подробный справочник о том, как загрузить его в Имгур.

Generic загрузки может идти, как это:

string uploadUrl = "http://uploadserver/upload.php"; 
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uploadUrl); 
request.Method = "POST"; 
request.ContentType = "image/jpeg"; 
request.BeginGetRequestStream((result) => 
{ 
    using (Stream stream = request.EndGetRequestStream(result)) 
    { 
     stream.Write(bytes, 0, bytes.Length); // your binary data 
    } 

    request.BeginGetResponse((rResult) => 
    { 
     HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(rResult); 

     using (Stream responseStream = response.GetResponseStream()) 
     { 
       // Do something here. 
     } 
    } 
}, null); 
+0

Большое спасибо за ответ. На самом деле, я хочу загрузить его на свой сервер; так же, как в форме загрузки HTML. Другими словами, симуляция многопользовательской формы загрузки файлов на C# - это то, что мне нужно. Я много пробовал, но я не мог понять, как это сделать. Пожалуйста, помогите мне. –

+0

Ваш сервер должен иметь конечную точку для загрузки. Это не вопрос: «Вот файл с моего телефона, как-нибудь его сохраните». Есть ли у вас один сервер? –

+0

См., Я могу загрузить изображения на свой сервер с помощью загрузки файлов PHP. Я просто хочу сделать то же самое, но с приложением по телефону. Вот и все. –

0

Вот как я это сделал:

static private async Task<JToken> 
      ImageUploadApiCallAsync(string strApiName, List<KeyValuePair<string, string>> parameterList, Stream imageStream, string strFileName) 
     { 
      JToken token = null; 

      if (!CheckConnection()) 
      { 
       token = @"{ 
           'success':false, 
           'message':'No connection', 
           'errorcode':1 
           }"; 
       return token; 
      } 

      try 
      { 
       //Get your api URL 
       string strRequestUri = getApiUrlWithApiName(strApiName); 

       var httpClient = new HttpClient(new HttpClientHandler()); 

       using (var content = new MultipartFormDataContent()) 
       { 
        //I did a stream compression here since I don't want the original size image to upload to my server to reduce space and internet flow. 
        Stream uploadStream = SystemUtil.CompressImageStream(imageStream); 

        content.Add(new StreamContent(uploadStream), "file", strFileName); 

        //Add my api parameters into content 
        foreach (var keyValuePair in parameterList) 
        { 
         content.Add(new StringContent(keyValuePair.Value), keyValuePair.Key); 
        } 
        //Do PostAsync 
        HttpResponseMessage response = await httpClient.PostAsync(strRequestUri, content); 
        HttpResponseMessage message = response.EnsureSuccessStatusCode(); 
        //Get result from server 
        var responseString = await response.Content.ReadAsStringAsync(); 

        token = JObject.Parse(responseString); 
       } 
      } 
      catch (Exception e) 
      { 
       token = @"{ 
           'success':false,'message':'" + e.Message + "','errorcode':2}"; 
      } 
      return token; 
     }