Как скачать видео с помощью ASP.NET? - PullRequest
2 голосов
/ 11 апреля 2010

как загрузить видеофайл .wmv и сохранить его на диске пользователя, нажав на кнопку, не используя ссылку для сохранения в браузере как

Ответы [ 3 ]

2 голосов
/ 11 апреля 2010

Это не так сложно сделать. Как упоминает dtb, браузер пользователя по-прежнему будет запрашивать у пользователя разрешение на загрузку файла, и у него может быть возможность выбрать место для сохранения файла. Так что это не будет полностью автоматически.

Вот ссылка на пост в блоге, объясняющий, как это делается с использованием веб-форм . Основная часть, которая вас интересует, такова:

Response.ContentType = "video/x-ms-wmv";
Response.AppendHeader("Content-Disposition","attachment; filename=MyMovie.wmv");
Response.TransmitFile( Server.MapPath("~/videos/MyMovie.wmv") );
Response.End();

Вот вопрос о переполнении стека ссылок, объясняющий , как это сделать в MVC .

Основываясь на вашем комментарии, вы хотите сделать это в Silverlight. Я не эксперт в Silverlight, но вот еще один вопрос о переполнении стека, в котором обсуждается проблема .

1 голос
/ 11 апреля 2010

Вы можете использовать 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, но, насколько я понимаю, этого не произошло.

0 голосов
/ 20 сентября 2018

Попробуйте добавить метод в контроллер, который поможет загрузить видео.

[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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...