public static async Task <bool> ChoiceFromDBAsync(this AdDesignData item, AdDesignTypes.en adDesignType) { var query = new DBQuery_AdDesign_Choice(); query.IN.AdDesignType = adDesignType; await DBThread.Instance.ReqQueryAsync(query); if (query.OUT.FirstItem == null) { return(false); } query.OUT.FirstItem.Copy(item); return(true); }
public async Task <IActionResult> Upload([FromForm] AdResourceModels.Upload.Request request) { // Check session validation if (await CheckSessionValidationAndSignOutAsync() == false) { return(APIResponse(ErrorCode.InvalidSession)); } // Check valid parameters if (request == null || request.IsValidParameters() == false) { return(APIResponse(ErrorCode.InvalidParameters)); } // Check validation byte[] contents; SKBitmap bitmap = null; AdDesignTypes.en adDesignType = AdDesignTypes.en.None; try { var contentType = request.File.ContentType.ToLower(); if (SUPPORT_IMAGE_CONTENT_TYPE.Contains(contentType) == false) { return(APIResponse(ErrorCode.NotSupportFormat)); } var stream = request.File.OpenReadStream(); //if (stream.Length > MAX_RESOURCE_SIZE) // return APIResponse(ErrorCode.InvalidResource); contents = new byte[stream.Length]; await stream.ReadAsync(contents, 0, contents.Length); bitmap = SKBitmap.Decode(contents); if (bitmap.Width >= short.MaxValue || bitmap.Height >= short.MaxValue) { return(APIResponse(ErrorCode.InvalidResource)); } adDesignType = AdDesignTypes.ToEnum(new Size(bitmap.Width, bitmap.Height)); if (adDesignType == AdDesignTypes.en.None) { return(APIResponse(ErrorCode.InvalidSize)); } } catch (Exception ex) { Console.WriteLine($"{ex.Message}\n{ex.StackTrace}"); return(APIResponse(ErrorCode.UknownError)); } // Generate Resource Id var adResourceId = IDGenerator.NewAdResourceId; var remotePath = $"aic/resources/{UserId}/{adResourceId}"; // Upload to ftp FtpClient ftp = new FtpClient(WebConfiguration.Instance.FTPHost, WebConfiguration.Instance.FTPId, WebConfiguration.Instance.FTPPassword); if (await ftp.UploadAsync(remotePath, contents) == false) { await ftp.CreateDirectoryAsync($"aic"); await ftp.CreateDirectoryAsync($"aic/resources"); await ftp.CreateDirectoryAsync($"aic/resources/{UserId}"); if (await ftp.UploadAsync(remotePath, contents) == false) { return(APIResponse(ErrorCode.Failed)); } } // Insert to db var insertQuery = new DBQuery_AdResource_Insert(); var item = insertQuery.IN.Item; item.UserId = UserId; item.AdResourceId = adResourceId; item.AdDesignType = adDesignType; item.ContentType = request.File.ContentType; item.Width = (short)bitmap.Width; item.Height = (short)bitmap.Height; if (await DBThread.Instance.ReqQueryAsync(insertQuery) == false) { return(APIResponse(ErrorCode.DatabaseError)); } // Response var response = new AdResourceModels.Upload.Response(); if (await response.FromDBAsync(item.AdResourceId) == false) { return(APIResponse(ErrorCode.DatabaseError)); } return(Success(response)); }