Use Byte[] instead of File for DTO

This commit is contained in:
2025-06-28 11:03:16 -07:00
parent c08cf9ff43
commit dbf9ad464c
5 changed files with 36 additions and 26 deletions
@@ -57,9 +57,21 @@ namespace MistoxWebsite.Server.Controllers {
[Route( "api/product/create" )]
[HttpPost]
public async Task<ActionResult<bool>> CreateProduct( [FromBody] Product obj ) {
public async Task<ActionResult<bool>> CreateProduct([FromForm] Product obj, [FromForm] List<IFormFile> images){
try {
await _databaseService.NewProduct( obj );
List<ProductImage> building = new List<ProductImage>();
foreach (var file in images) {
using (var stream = new MemoryStream()) {
await file.CopyToAsync(stream);
var bytes = stream.ToArray();
// Convert to your image model or whatever your logic is
ProductImage img = new ProductImage { Image = bytes, Name = file.FileName };
building.Add(img);
}
}
obj.Images = building.ToArray();
await _databaseService.NewProduct(obj);
await UpdateStore();
return true;
} catch {
@@ -33,7 +33,8 @@ namespace MistoxWebsite.Server.Entities {
public class ProductImage {
public int ImageID { get; set; } // PK
public int ProductID { get; set; }
public FormFile? Image { get; set; } = null;
public byte[] Image { get; set; } = Array.Empty<byte>();
public string Name { get; set; } = "";
}
public class Cart {
@@ -26,11 +26,13 @@ namespace MistoxWebsite.Server.Services.DatabaseService {
int _ImageID = reader.GetInt32("ImageID");
int _ProductID = reader.GetInt32("ProductID");
byte[] _Image = (byte[])reader["Image"];
string _Name = reader.GetString("Name");
items.Add(new ProductImage() {
ImageID = _ImageID,
ProductID = _ProductID,
Image = BytesToFile(_Image)
Image = _Image,
Name = _Name
});
}
}
@@ -45,13 +47,14 @@ namespace MistoxWebsite.Server.Services.DatabaseService {
if (cur.Image != null) {
string command = @"
INSERT INTO ProductImage
(ProductID, Image)
(ProductID, Image, Name)
VALUES
(@ProductID, @Image);
(@ProductID, @Image, @Name);
";
MySqlCommand cmd = new MySqlCommand(command, connection);
cmd.Parameters.AddWithValue("@ProductID", Item.ID);
cmd.Parameters.AddWithValue("@Image", await FileToBytes( cur.Image ));
cmd.Parameters.AddWithValue("@Image", cur.Image );
cmd.Parameters.AddWithValue("@Name", cur.Name );
await cmd.ExecuteNonQueryAsync();
}
}
@@ -71,19 +74,5 @@ namespace MistoxWebsite.Server.Services.DatabaseService {
await cmd.ExecuteNonQueryAsync();
}
}
public async Task<byte[]> FileToBytes(IFormFile file) {
using (var memoryStream = new MemoryStream()) {
await file.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
}
public FormFile BytesToFile(byte[] fileBytes) {
var stream = new MemoryStream(fileBytes);
return new FormFile(stream, 0, fileBytes.Length, "file", Guid.NewGuid().ToString()) {
Headers = new HeaderDictionary()
};
}
}
}