diff --git a/database/mistox.sql b/database/mistox.sql index b736036..798b850 100755 --- a/database/mistox.sql +++ b/database/mistox.sql @@ -32,6 +32,7 @@ CREATE TABLE IF NOT EXISTS `ProductImage` ( `ImageID` int(11) NOT NULL AUTO_INCREMENT, `ProductID` int(11) NOT NULL, `Image` MEDIUMBLOB, + `Name` varchar(60) DEFAULT NULL, PRIMARY KEY (`ImageID`,`ProductID`) ) AUTO_INCREMENT=1; diff --git a/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts b/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts index b95958a..61547f8 100644 --- a/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts +++ b/src/MistoxWebsite.Client/src/app/pages/store/admin/newitem/new.component.ts @@ -67,17 +67,24 @@ export class NewItemComponent { } onSubmit(){ - // Add uploaded files to dto + + const formData = new FormData(); + + // Append non-file fields + formData.append("Name", this.newItem.name); + formData.append("Description", this.newItem.description); + formData.append("Cost", this.newItem.cost.toString()); + formData.append("Url", this.newItem.url); + + // Add image fileds if (this.selectedFiles.length > 0){ for(let i=0; i( "https://mistox.com/api/product/create", this.newItem ).subscribe({ + this.http.post( "https://mistox.com/api/product/create", formData ).subscribe({ next: async (data) => { if (data == true){ this.errorMsgs = ["Product Created Successfully"]; diff --git a/src/MistoxWebsite.Server/Controllers/ProductController.cs b/src/MistoxWebsite.Server/Controllers/ProductController.cs index 1d88daf..6a52eb1 100755 --- a/src/MistoxWebsite.Server/Controllers/ProductController.cs +++ b/src/MistoxWebsite.Server/Controllers/ProductController.cs @@ -57,9 +57,21 @@ namespace MistoxWebsite.Server.Controllers { [Route( "api/product/create" )] [HttpPost] - public async Task> CreateProduct( [FromBody] Product obj ) { + public async Task> CreateProduct([FromForm] Product obj, [FromForm] List images){ try { - await _databaseService.NewProduct( obj ); + List building = new List(); + 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 { diff --git a/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs b/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs index fff125d..495b317 100755 --- a/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs +++ b/src/MistoxWebsite.Server/Entities/DatabaseObjects.cs @@ -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(); + public string Name { get; set; } = ""; } public class Cart { diff --git a/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs b/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs index d1e4ce8..09424f8 100644 --- a/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs +++ b/src/MistoxWebsite.Server/Services/DatabaseService/ProductImage.cs @@ -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 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() - }; - } } }