Получение данных Blob вместе с другими столбцами с SQL сервера в ASP. NET Core веб-API - PullRequest
0 голосов
/ 07 августа 2020

Я пытаюсь записать данные большого двоичного объекта в таблицу (вместе с другими столбцами, такими как имя файла для большого двоичного объекта, и т. Д. c.), А затем снова прочитать данные большого двоичного объекта (вместе с другими столбцами в таблице) из конечной точки веб-API. Я выполнил операцию POST, но мне не удалось написать соответствующую операцию GET. Любые идеи, как мне go реализовать GET для извлечения всех столбцов (включая BLOB) через конечную точку:

Вот код для моей SQL серверной таблицы:

CREATE TABLE [dbo].[Spectra](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [FileName] [nvarchar](100) NULL,
    [blob] [varbinary](max) NULL
)

Вот моя попытка POST:

public class SpectraViewModel
{
    public string SpectraFileName { get; set; }
    public IFormFile SpectraFileNamePath { get; set; }

}

    [HttpPost]
    public async Task<ActionResult> Post([FromForm] SpectraViewModel spectraVM)
    {
        if (spectraVM.SpectraFileNamePath != null)
        {
            var conn = Microsoft.Extensions.Configuration.ConfigurationExtensions.GetConnectionString(this.configuration, "BlobConnection");

            var fileName = Path.GetFileName(spectraVM.SpectraFileNamePath.FileName);
            var filePath = Path.Combine(_hostingEnv.WebRootPath, "Spectra\\Images", fileName);

            using (var fileStream = new FileStream(filePath, FileMode.Create))
            {
                await spectraVM.SpectraFileNamePath.CopyToAsync(fileStream);
            }


            using (SqlConnection connection = new SqlConnection(conn))
            {
                using (SqlCommand command = new SqlCommand())
                {
                    try
                    {
                        byte[] fileBytes = System.IO.File.ReadAllBytes(filePath);
                        string byteStream = Convert.ToBase64String(fileBytes);

                        connection.Open();
                        command.Connection = connection;
                        
                        command.CommandText = "insert into Spectra(FileName,blob)   VALUES(@param1,@param2)";
                        command.Parameters.AddWithValue("@param1", spectraVM.SpectraFileName);
                        command.Parameters.AddWithValue("@param2", fileBytes);

                        command.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }

            return Ok();
        }
        else
        {
            return BadRequest();
        }
    }

Как мне реализовать GET для данных в таблице Spectra (если я могу сделать GET asyn c, это было бы неплохо ). Класс для хранения одной строки данных из таблицы будет примерно таким:

 public class Spectra
    {
        public int Id { get; set; }
        public string FileName { get; set; }
        public byte[] spectra { get; set; }

    }
    [HttpGet]
    public IEnumerable<Spectra> Get()
    {??????}

Кроме того, действительно ли операция POST async или мне нужно позаботиться о чем-то еще?

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