如何下载视频文件.wmv并在没有使用浏览器保存链接的情况下单击按钮将其保存到用户的磁盘
答案 0 :(得分:2)
这并不难做到。正如dtb所提到的,用户的浏览器仍然会要求用户下载文件的权限,他们可以选择保存文件的位置。所以它不会完全自动化。
以下是博客文章的链接,说明了如何完成此活动using webforms。您感兴趣的主要部分是:
Response.ContentType = "video/x-ms-wmv";
Response.AppendHeader("Content-Disposition","attachment; filename=MyMovie.wmv");
Response.TransmitFile( Server.MapPath("~/videos/MyMovie.wmv") );
Response.End();
这是一个链接堆栈溢出问题,解释了how to do it in MVC。
根据您的评论,您希望在silverlight中执行此操作。我不是silverlight的专家,但这是关于堆栈溢出的另一个问题discusses the issue。
答案 1 :(得分:1)
您可以使用WebClient
下载wmv文件和SaveFileDialog
来询问用户将其放在何处: -
void DownloadButton_Click(object sender, RoutedEventArgs e)
{
var dialog = new SaveFileDialog();
if (dialog.ShowDialog().Value)
{
var web = new WebClient();
web.OpenReadCompleted = (s, args) =>
{
try
{
using (args.Result)
using (Stream streamOut = args.UserState As Stream)
{
Pump(args.Result, streamOut);
}
}
catch
{
// Do something sensible when the download has failed.
}
};
web.OpenReadAsync(UriOfWmv, ShowDialog.OpenFile());
}
}
private static void Pump(Stream input, Stream output)
{
byte[] bytes = new byte[4096];
int n;
while((n = input.Read(bytes, 0, bytes.Length)) != 0)
{
output.Write(bytes, 0, n);
}
}
但是目前还没有办法显示下载进度信息。我希望能进入Silverlight 4,但据我所知,它没有。
答案 2 :(得分:0)
尝试在控制器中添加一种有助于下载视频的方法。
[HttpGet]
public FileResult DownloadFile(int? fileId)
{
FilesEntities entities = new FilesEntities();
Video video = entities.Videos.ToList().Find(p => p.id == fileId.Value);
return File(video.Data, video.ContentType, video.Name);
}