Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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));
        }