Asp.Net Core 2 - аудиофайлы из базы данных и в нее - PullRequest
0 голосов
/ 21 ноября 2018

В настоящее время я создаю веб-приложение, которое должно воспроизводить звуковые файлы.Первая проблема, с которой я столкнулся, заключается в том, что при записи аудиофайлов в базу данных все записи имеют одинаковое значение, даже если они являются разными аудиофайлами, база данных с аудиофайлами

I 'Я не уверен, хорошо ли это сохранилось, но я хотел сделать это так же, как с фотографиями

Mp3 mp3 = new Mp3();
            using (var memoryStream = new MemoryStream())
            {
                await createViewModel.Name_mp3.CopyToAsync(memoryStream);
                mp3.Name_mp3 = memoryStream.ToArray();
            }
            _context.Mp3.Add(mp3);
            _context.SaveChanges();

Пожалуйста, подскажите, как это должно выглядеть


Второй вопрос - как извлечь эти аудиофайлы из базы данных.Я также попробовал способ извлечения изображений из базы данных.

Так что мой взгляд выглядит следующим образом

    @model IEnumerable<inz.Models.Song>

@{
    ViewData["Title"] = "Index";
}

<div class="panelDiv textColor">
    <form asp-controller="Songs" asp-action="Index" method="get">
        <div class="input-group w-50 m-4 mx-auto">
            <input type="text" class="form-control input-lg border-danger searchBorder" placeholder="Wyszukaj utwór lub artyste" name="search" />
            <span class="input-group-btn">
                <button class="btn btn-danger" type="submit">
                    <i class="fas fa-search"></i>
                </button>
            </span>
            <div class="dropdown w-0">
                <button class="btn btn-danger dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></button>

                <div class="dropdown-menu bg-danger" aria-labelledby="dropdownMenuButton">
                    <input type="submit" name="all" value="Wyświetl wszystko" class="btn btn-danger" />
                </div>
            </div>
        </div>
    </form>
    <div class="text-center m-5">
        <a asp-action=Create>
            <buton class="textColor btnDiv">
                Dodaj nowy utwór <i class="fas fa-plus-circle fa-lg"></i>
            </buton>
        </a>
    </div>
    @if (ViewBag.ShowList == true)
    {
        <div class="table-responsive">
            <table class="table tableSong">
                <thead class="bg-danger table-borderless">
                    <tr>
                        <th>

                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.Title)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.Album.Name_Album)
                        </th>
                        <th>
                            @Html.DisplayNameFor(model => model.Artist.Name_Artist)
                        </th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    @foreach (var item in Model)
                    {
                        <tr>
                            <td>
                                <i class="fas fa-thumbs-up"></i>
                                &nbsp;
                                &nbsp;
                                <i class="fas fa-thumbs-down"></i>
                            </td>
                            <td>
                                @Html.DisplayFor(modelItem => item.Title)
                            </td>
                            <td>
                                @if (item.Album.Name_Album != null)
                                {
                                    <a asp-controller="Songs" asp-action="Album" asp-route-nameAlbum="@item.Album.Name_Album" class="link">@Html.DisplayFor(modelItem => item.Album.Name_Album)</a>
                                }
                                else
                                {
                                    <span>Brak informacji</span>
                                }
                            </td>
                            <td>
                                <a asp-controller="Songs" asp-action="Artist" asp-route-name="@item.Artist.Name_Artist" class="link">@Html.DisplayFor(modelItem => item.Artist.Name_Artist)</a>
                            </td>
                            <td>
                                <a asp-action="Edit" asp-route-id="@item.ID_Song">
                                    <buton class="textColor btnIndex">Edytuj</buton>
                                </a>
                                <a asp-action="Details" asp-route-id="@item.ID_Song">
                                    <buton class="textColor btnIndex">Detale</buton>
                                </a>

                                @if (User.IsInRole("Admin"))
                                {
                                    <a asp-action="Delete" asp-route-id="@item.ID_Song">
                                        <buton class="textColor btnIndex">Usuń</buton>
                                    </a>
                                }   
                            </td>
                            **<td>
                                @{
                                    var base64 = Convert.ToBase64String(item.Mp3.Name_mp3);
                                    var imgSrc = String.Format("data:audio/mp3;base64,{0}", base64);
                                }
                                <audio controls>
                                    <source src="@imgSrc" type="audio/ogg" />
                                </audio>
                            </td>**
                        </tr>
                    }
                </tbody>
            </table>



        </div>
    }
    else
    {
        <p class="mt-5"> Brak zawartości do wyświetlenia</p>
    }
</div>

Но у меня все еще есть ошибка

Я добавлю, как выглядят мои модели

public class Mp3
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ID_Mp3 { get; set; }

        public byte[] Name_mp3 { get; set; }
    }

и

public class CreateViewModel
    {
        public int ID_Song { get; set; }

        [Required(ErrorMessage = "Proszę wpisać tytuł")]
        [Display(Name = "Tytuł")]
        public string Title { get; set; }

        [Required(ErrorMessage = "Proszę wpisać nazwę artysty")]
        [Display(Name = "Artysta")]
        public string Name_Artist { get; set; }

        [Display(Name = "Album")]
        public string Name_Album { get; set; }

        [Display(Name = "Producent")]
        public string Name_Producer { get; set; }

        public IFormFile Name_mp3 { get; set; }
    }

Я прошу подсказки и прошу прощения за мой английский

1 Ответ

0 голосов
/ 21 ноября 2018

Не думаю, что хранить аудиофайлы в базе данных - это хорошая идея.

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

public class File
{
    [Key]
    public Guid Id { get; set; }
    [Required]
    public string Name{ get; set; }
    [Required]
    public string Path { get; set; }
    [Required]
    public DateTime Registered{ get; set; }
    [Required]
    public string RegisteredBy { get; set; }
    public string Notes { get; set; }
}

Чтобы сохранить файл:

using (var db = new EFModel())
{
    if (file.Id == Guid.Empty)
    {
        file.Id = Guid.NewGuid();
        db.Entry(file).State = EntityState.Added;
    }
    else
        db.Entry(file).State = EntityState.Modified;

    db.SaveChanges();
    return archivo;
}

В кнопке / действии сохранения:

if (!fuArchivo.HasFile)
    throw new UserException("Debes seleccionar un archivo.");

string nombreArchivo = Path.GetFileNameWithoutExtension(fuArchivo.FileName);
string extension = Path.GetExtension(fuArchivo.FileName);

string pathArchivo = Path.Combine(ConfigurationManager.AppSettings["rutaCarga"],
    ae.IdTitulo.ToString(), ae.IdArchivoEtapa.ToString());
if (!Directory.Exists(pathArchivo))
    Directory.CreateDirectory(pathArchivo);
pathArchivo = Path.Combine(pathArchivo, Guid.NewGuid().ToString() + extension);

fuArchivo.SaveAs(pathArchivo);
if (File.Exists(pathArchivo))
{
    var archivo = new File()
    {
        Id = Guid.Empty,
        RegisteredBy = ClaimsPrincipal.Current.Identity.Name,
        Registered = DateTime.Now,
        Name = nombreArchivo,
        Path = pathArchivo
    };
    var on = new FileBO();
    return on.Save(archivo);
}
else
    throw new Exception("Se guardó el archivo pero no existe.");

Извините, но по-испански.Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...