Я пытаюсь позволить людям сохранять видео в базе данных, тогда другие пользователи могут смотреть это видео онлайн. Я сохраняю свои файлы в wwwroot/videos/Username, сохраняя другую информацию (название видео, описание, URL) в базе данных. Получил все файлы для сохранения, но не могу воспроизвести видео. Провел некоторое исследование и выяснил, что по соображениям безопасности firefox и chrome не могут воспроизводить видео с вашего диска. Лучше ли правильно сохранить видеофайл IFormFile в базе данных и вызывать его через день? Или есть способ заставить это работать?
Загрузка и сохранение видео:
[HttpPost]
public async Task<IActionResult> UploadVideo(VideoViewModel video, IFormFile file)
{
if (file.Length > 0)
{
try
{
string userName = (User.Claims.FirstOrDefault(c => c.Type == System.Security.Claims.ClaimTypes.Name).Value);
string pathString = Path.Combine(@"path", userName);
if (!Directory.Exists(pathString))
{
Directory.CreateDirectory(pathString);
}
int fCount = Directory.GetFiles(pathString, "*", SearchOption.TopDirectoryOnly).Length + 1;
var filePath = Path.Combine(pathString, file.FileName);
using (var stream = new FileStream(filePath, FileMode.Create))
{
await file.CopyToAsync(stream);
_videoLogic.SaveVideo(new Video(video.VideoId, video.Description, file.FileName, DateTime.Now, filePath, video.CategoryId));
}
}
catch (Exception ex)
{
ViewBag.Message = "ERROR: " + ex.Message.ToString();
}
}
else
{
ViewBag.Message = "You have not specified a file.";
}
return RedirectToAction("UploadVideo");
}
Попытка просмотра видео:
<h2>Overzicht Videos gebruiker</h2>
<!DOCTYPE html>
<html>
<head>
<link href="~/Content/bootstrap.min.css" rel="stylesheet" />
</head>
<body>
<div class="container">
@foreach(var item in Model)
{
<div class="col-sm-4 col-md-4 col-xs-12">
<div class="modal-title" style="width:250px;">@item.Name</div>
<hr/>
<div class="video-frame">
<video style="width:250px; height:150px;" controls>
<source src="@Url.Content(item.ContentUrl)" type="video/mp4" />
</video>
</div>
</div>
}
</div>
</body>
</html>
Код для получения видео в контроллере:
[HttpGet]
public ActionResult GetVideosUser(UserViewModel user)
{
List<VideoViewModel> videoViewModels = new List<VideoViewModel>();
string userName = user.FirstName + " " + user.LastName;
string pathString = Path.Combine(@"path", userName);
List<Video> videos = _videoLogic.GetVideos();
foreach (Video video in videos)
{
VideoViewModel videoViewModel = new VideoViewModel(video);
videoViewModels.Add(videoViewModel);
}
return View("ViewerVideoList", videoViewModels);
}
Этот код правильно загружает данные в мою базу данных и загружает правильный файл в мой видеофолдер. Он также правильно получает ContentUrl, указанный выше. Как я могу заставить это видео воспроизводиться правильно? Заранее большое спасибо!
Изображение кода:! [Код]: https://imgur.com/a/xdprrAw
URL в Chrome: / wwwroot/video/Jesse%20Oosterwijk/WhatsApp%20Video%202019-12-04%20at%2018.04.49.mp4
! [ChromeCode]: https://imgur.com/a/kCM3p71
! [FileIsThere]: https://imgur.com/a/WaXQtUd
CorrectExtensions https://imgur.com/a/KTI2vSv