如何解决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 举报,一经查实,本站将立刻删除。