Я пытаюсь записать данные большого двоичного объекта в таблицу (вместе с другими столбцами, такими как имя файла для большого двоичного объекта, и т. Д. 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
или мне нужно позаботиться о чем-то еще?