Silverlight中的文件上载

时间:2012-01-12 18:15:07

标签: c# silverlight

我需要使用Silverlight和C#更新远程服务器上的文件。 我在当前计算机上创建了该文件,之后我尝试使用this example上传它。它没有返回任何错误,但它也没有上传我的文件。

你能帮帮我吗?

这是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没有到达任何一个。

1 个答案:

答案 0 :(得分:2)

认为您需要检查上传文件夹是否存在,并写入访问权限