微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

silverlight 4文件上传到mvc 3控制器HttpPostedFileBase为null

如何解决silverlight 4文件上传到mvc 3控制器HttpPostedFileBase为null

|| 我有一个mvc 3页面,我希望能够使用silverlight将图像上传到我的网站进行上传,并在上传显示进度栏和取消按钮。但是我在HttpPostedFileBase参数的控制器中一直获取空值。 这是我的Silverlight上传代码...
        var client = new WebClient();
        client.Headers[HttpRequestHeader.ContentType] = \"multipart/form-data\";  
        client.OpenWriteCompleted += (sender1,e1) =>
        {                       
            PushData(stream,e1.Result);
            e1.Result.Close();
            stream.Close();
        };

        client.UploadProgressChanged += (sender1,e1) =>
        {
            this.pbStatus.Value = e1.Progresspercentage;
        };

        // get uri from params
        param = App.Current.Host.InitParams[\"url\"];
        var uri = new Uri(param,UriKind.Relative);
        client.OpenWriteAsync(uri,\"POST\");
推送数据方法...
    private void PushData(Stream input,Stream output)
    {
        byte[] buffer = new byte[4096];
        int bytesRead;

        while ((bytesRead = input.Read(buffer,buffer.Length)) != 0)
        {
            output.Write(buffer,bytesRead);
        }
    }                                                         
还有我的控制器代码
[HttpPost]
public ActionResult UploadTexture(HttpPostedFileBase file)
{ 
}
调用控制器时,控制器中的文件参数为null。有人知道我在做什么错吗? 我已经看到了实现IHttpHandler的示例,但是我试图避免这样做,而只使用简单的mvc 3控制器。     

解决方法

        我遇到了与您同样的问题。我能够以另一种方式解决此问题。
foreach (FileInfo fi in uploadedFiles)
        {
            UriBuilder ub = new UriBuilder(Application.Current.Host.Source.Host + \"/Excel/?fileName=\" + fi.Name);
            WebClient wc = new WebClient();
            wc.Headers[HttpRequestHeader.ContentType] = \"multipart/form-data\"; 
            wc.OpenWriteCompleted += (sender,e) =>
            {
                FileStream data = fi.OpenRead();
                PushData(data,e.Result);
                e.Result.Close();
                data.Close();
            };
            wc.OpenWriteAsync(ub.Uri,\"POST\");
        }
您将看到的主要区别是我将文件名附加到URL。我的PushData()是相同的。在MVC方面,我有:
[HttpPost]
    public ActionResult Index(string fileName)
    {
        using (FileStream fs = System.IO.File.Create(Server.MapPath(\"~/FilesExcel/\" + fileName)))
        {
            SaveFile(Request.InputStream,fs);
        }

        return View();
    }

    private void SaveFile(Stream stream,FileStream fs)
    {
        byte[] buffer = new byte[4096];
        int bytesRead;

        while ((bytesRead = stream.Read(buffer,buffer.Length)) != 0)
        {
            fs.Write(buffer,bytesRead);
        }
    }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。