2012-01-12 62 views
1

我需要使用Silverlight和C#更新遠程服務器上的文件。 我在當前機器上創建了該文件,之後我嘗試使用this example上傳它。它沒有返回錯誤,但它也沒有上傳我的文件。在Silverlight中上傳文件

你能幫我嗎?

這是ASHX代碼

<%@ WebHandler Language="C#" Class="receiver" %> 

using System; 
using System.Web; 
using System.IO; 

public class receiver : IHttpHandler { 

    public void ProcessRequest (HttpContext context) { 
    string filename = context.Request.QueryString["DB.xml"].ToString(); 

    using (FileStream fs = File.Create(context.Server.MapPath("~/CLientBin" + filename))) 
    { 
     SaveFile(context.Request.InputStream, fs); 
    } 
} 

private void SaveFile(Stream stream, FileStream fs) 
{ 
    byte[] buffer = new byte[4096]; 
    int bytesRead; 
    while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0) 
    { 
     fs.Write(buffer, 0, bytesRead); 
    } 

} 

public bool IsReusable { 
    get { 
     return false; 
    } 
} 
} 

,這是C#代碼:

 OpenFileDialog dlg = new OpenFileDialog(); 
     dlg.Multiselect = false; 
     dlg.Filter = "All files (*.*)|*.*|PNG Images (*.png)|*.png"; 

     bool? retval = dlg.ShowDialog(); 

     if (retval != null && retval == true) 
     { 
      try 
      { 
       UploadFile(dlg.File.Name, dlg.File.OpenRead()); 
       titlu.Text = dlg.File.Name; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
      } 
     } 
     else 
     { 
      titlu.Text = "No file selected..."; 
     } 
    } 

    private void UploadFile(string fileName, Stream data) 
    { 
     UriBuilder ub = new UriBuilder("http://ganduri.elementfx.com/Handler.ashx"); 
     ub.Query = string.Format("filename={0}", fileName); 

     WebClient c = new WebClient(); 
     c.OpenWriteCompleted += (sender, e) => 
     { 
      PushData(data, e.Result); 
      e.Result.Close(); 
      data.Close(); 
     }; 
     c.OpenWriteAsync(ub.Uri); 
    } 

    private void PushData(Stream input, Stream output) 
    { 
     byte[] buffer = new byte[4096]; 
     int bytesRead; 

     while ((bytesRead = input.Read(buffer, 0, buffer.Length)) != 0) 
     { 
      output.Write(buffer, 0, bytesRead); 
     } 
     MessageBox.Show("Writed"); 
    } 

我還檢查了權限的ClientBin文件夾中,讀/寫權限 當我運行這段代碼向我展示了「Writed」messageBox,但是如果我查看服務器,文件不在任何地方。 我已經在af ashx文件函數中設置了一個斷點,並且id沒有到達它們中的任何一個。

+2

我不認爲我們可以幫你沒有源代碼... – Nuffin 2012-01-12 18:20:24

+0

剛剛嘗試調試。 – 2012-01-12 18:24:07

+0

額外提示:請注意,該示例接受任何文件名,當有人開始傳遞'「../../ somename」時,可能會給您帶來很多麻煩'' – 2012-01-12 19:23:52

回答

2

認爲你需要檢查上傳文件夾存在,並寫入訪問權限