2013-04-23 4 views
0

Я использую PhotoChooserTask для выбора изображения с телефона Windows, а затем я хочу отправить этот file/image на сервер.SILVERLIGHT отправка файла на сервер

WebClient имеет способ UploadFile, но WebClient в Silverlight не имеет этого метода. Я пытался использовать несколько примеров, которые я нашел на этом форуме, но он не работает. Может ли кто-нибудь помочь мне сделать это с самого начала? Я действительно не понимаю, как работает Silverlight.

ответ

0

Вы можете использовать класс WebClient для загрузки файла в

private void UploadFile() 
     { 
      FileStream _data; // The file stream to be read 
      string uploadUri; 

      byte[] fileContent = new byte[_data.Length]; 
      int bytesRead = _data.Read(fileContent, 0, CHUNK_SIZE); 

      WebClient wc = new WebClient(); 
      wc.OpenWriteCompleted += new OpenWriteCompletedEventHandler(wc_OpenWriteCompleted); 
      Uri u = new Uri(uploadUri); 
      wc.OpenWriteAsync(u, null, new object[] { fileContent, bytesRead }); 
     } 

     void wc_OpenWriteCompleted(object sender, OpenWriteCompletedEventArgs e) 
     { 
      if (e.Error == null) 
      { 
       // Upload completed without error 
      } 
     } 

На стороне сервера вы можете обращаться как

public void ProcessRequest(HttpContext context) 
    { 
     if (context.Request.InputStream.Length == 0) 
      throw new ArgumentException("No file input"); 
     if (context.Request.QueryString["fileName"] == null) 
      throw new Exception("Parameter fileName not set!"); 

     string fileName = context.Request.QueryString["fileName"]; 
     string filePath = @HostingEnvironment.ApplicationPhysicalPath + "/" + fileName; 
     bool appendToFile = context.Request.QueryString["append"] != null && context.Request.QueryString["append"] == "1"; 

     FileMode fileMode; 
     if (!appendToFile) 
     { 
      if (File.Exists(filePath)) 
       File.Delete(filePath); 
      fileMode = FileMode.Create; 
     } 
     else 
     { 
      fileMode = FileMode.Append; 
     } 
     using (FileStream fs = File.Open(filePath, fileMode)) 
     { 
      byte[] buffer = new byte[4096]; 
      int bytesRead; 
      while ((bytesRead = context.Request.InputStream.Read(buffer, 0, buffer.Length)) != 0) 
      { 
       fs.Write(buffer, 0, bytesRead); 
      } 
      fs.Close(); 
     } 
    } 

Надеется, что это поможет.

+0

Я не понимаю ваш «код на стороне сервера». Сервер, который получит данные shuold, имеет этот код? Итак, есть небольшая проблема: мой serwer с php не C#. – kramo

+0

Я не работал с PHP. но в C# «Код на стороне сервера» означает всякий раз, когда вы вызываете какую-либо страницу, такую ​​как Home.aspx с клиентской стороны, На стороне сервера при загрузке страницы мы можем обрабатывать выше «Код на стороне сервера». – Dany

+0

Я использовал ваш код, меняю только одну строку 'FileStream _data = (FileStream) e.ChosenPhoto; 'где e.ChoosenPhoto является результатом PhotoChooserTask. Сервер не получил никакого запроса от этого кода. – kramo

Смежные вопросы