Audio files won't play on Postgresql

Kalyan A 65 Reputation points
2024-07-18T18:02:41.9666667+00:00

I am trying to upload audio mp3 files to postgresql db , they get uploaded but I can't play them neither download them

using System;
using System.Collections.Generic;
namespace SupaCrud.Models;
public partial class Questionsad
{
    public int Sno { get; set; }
    public int No { get; set; }
    public string? Topic { get; set; }
    public string? QuestionTitle { get; set; }
    public string? Opt1 { get; set; }
    public string? Opt2 { get; set; }
    public string? Opt3 { get; set; }
    public string? Opt4 { get; set; }
    public string? Answer { get; set; }
    public int? Time { get; set; }
    public int? Correct { get; set; }
    public string? Solution { get; set; }
    public byte[]? Audiodata { get; set; }
}
@model SupaCrud.Models.Questionsad
@{
    ViewData["Title"] = "Create";
}
<h1>Create</h1>
<h4>Questionsad</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form asp-action="Create" enctype="multipart/form-data">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="No" class="control-label"></label>
                <input asp-for="No" class="form-control" />
                <span asp-validation-for="No" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Topic" class="control-label"></label>
                <input asp-for="Topic" class="form-control" />
                <span asp-validation-for="Topic" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="QuestionTitle" class="control-label"></label>
                <input asp-for="QuestionTitle" class="form-control" />
                <span asp-validation-for="QuestionTitle" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Opt1" class="control-label"></label>
                <input asp-for="Opt1" class="form-control" />
                <span asp-validation-for="Opt1" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Opt2" class="control-label"></label>
                <input asp-for="Opt2" class="form-control" />
                <span asp-validation-for="Opt2" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Opt3" class="control-label"></label>
                <input asp-for="Opt3" class="form-control" />
                <span asp-validation-for="Opt3" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Opt4" class="control-label"></label>
                <input asp-for="Opt4" class="form-control" />
                <span asp-validation-for="Opt4" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Answer" class="control-label"></label>
                <input asp-for="Answer" class="form-control" />
                <span asp-validation-for="Answer" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Time" class="control-label"></label>
                <input asp-for="Time" class="form-control" />
                <span asp-validation-for="Time" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Correct" class="control-label"></label>
                <input asp-for="Correct" class="form-control" />
                <span asp-validation-for="Correct" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Solution" class="control-label"></label>
                <input asp-for="Solution" class="form-control" />
                <span asp-validation-for="Solution" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Audiodata" class="control-label"></label>
                <input name="Audiodata" type="file" class="form-control" />
                <span asp-validation-for="Audiodata" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-primary" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-action="Index">Back to List</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
 public IActionResult SampleVideoStream(int id)
        {
            var data = _context.Questionsads.Find(id);
            return File(data.Audiodata, "audio/mp3");
        }
  // POST: Questionsads/Create
        // To protect from overposting attacks, enable the specific properties you want to bind to.
        // For more details, see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> Create([Bind("Sno,No,Topic,QuestionTitle,Opt1,Opt2,Opt3,Opt4,Answer,Time,Correct,Solution,Audiodata")] Questionsad questionsad , [FromForm] IFormFile Audiodata)
        {
            using (var dataStream = new MemoryStream())
            {
                await Audiodata.CopyToAsync(dataStream);
                
                    questionsad.Audiodata = dataStream.ToArray();
          
                if (ModelState.IsValid)
                {
                    _context.Add(questionsad );
                    await _context.SaveChangesAsync();
                    return RedirectToAction(nameof(Index));
                }
                return View(questionsad);
            }
        }
@model IEnumerable<SupaCrud.Models.Questionsad>
@{
    ViewData["Title"] = "Index";
}
<h1>Index</h1>
<p>
    <a asp-action="Create">Create New</a>
</p>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.No)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Topic)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.QuestionTitle)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Opt1)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Opt2)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Opt3)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Opt4)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Answer)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Time)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Correct)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Solution)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Audiodata)
            </th>
            <th></th>
        </tr>
    </thead>
    <tbody>
@foreach (var item in Model) {
        <tr>
            <td>
                @Html.DisplayFor(modelItem => item.No)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Topic)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.QuestionTitle)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Opt1)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Opt2)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Opt3)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Opt4)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Answer)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Time)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Correct)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Solution)
            </td>
                <td>
                    <audio autoplay controls src="/Home/SampleVideoStream?id=@item.No" type='audio/mp3'></audio>
                </td>
            <td>
                <a asp-action="Edit" asp-route-id="@item.Sno">Edit</a> |
                <a asp-action="Details" asp-route-id="@item.Sno">Details</a> |
                <a asp-action="Delete" asp-route-id="@item.Sno">Delete</a>
            </td>
        </tr>
}
    </tbody>
</table>

Captureaudionotplay.PNG

ASP.NET Core
ASP.NET Core
A set of technologies in the .NET Framework for building web applications and XML web services.
4,400 questions
0 comments No comments
{count} votes

1 answer

Sort by: Most helpful
  1. SurferOnWww 2,491 Reputation points
    2024-07-19T01:10:48.1+00:00

    Please identify where the cause exists:

    (1) Uploading mp3 file from client,

    (2) Receiving the uploaded mp3 file at action method in server,

    (3) Storing the received mp3 file to PostgreSQL,

    (4) Obtaining the mp3 file from PostgreSQL according to request from client,

    (5) Downloading the mp3 file to client, or

    (6) Playing the downloaded mp3 file at client.

    0 comments No comments