Firstly, We can save image in database as a byte array. Here, We will create a webapi which accept image as a base64 string. And further, we will convert the base64 string image into byte array and save it in mysql database.
Datatype for MYSQL to save byte array is LONGBLOB.
Example
{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
public string UserImage { get; set; }//Base64 string
public string ImageMimeType { get; set; }
}
public class AccountController : ApiController
{
[HttpGet]
[Route("SaveUserInfo")]
[AppAuthorization]
public IHttpActionResult SaveUserInfo(UserInfo model)
{
if (model != null)
{
try
{
if (ModelState.IsValid)
{
var res = _userRepository.InsertUserInfo(model);
return Ok(res);
}
else
{
return Content<object>(HttpStatusCode.InternalServerError, new { Status = false, Message = "Invalid model." });
}
}
catch (Exception ex)
{
return Content<object>(HttpStatusCode.InternalServerError, new { Status = false, Message = ex.Message });
}
}
else
{
return Content<object>(HttpStatusCode.InternalServerError, new { Status = false, Message = "Please provide model." });
}
}
}
{
Dictionary<string, object> _sqlParams;
public object InsertUserInfo(UserInfo model)
{
if (model.UserPic != null && model.UserPic != "")
{
_sqlParams = new Dictionary<string, object>();
_sqlParams["FirstName "] = model.FirstName;
_sqlParams["LastName "] = model.LastName;
_sqlParams["Email"] = model.Email;
_sqlParams["ImageBytes"] = Convert.FromBase64String(model.UserImage);
_sqlParams["ImageName"] = model.FirstName;
_sqlParams["MimeType"] = model.PicMimeType;
long userId = DBUtility.ExecuteInsertSql(SqlQueryConstants.InsertUserInfo, _sqlParams);
return new {Status = true, Data = http://www.url.com:8098/UserImage/" + userId };//This url will render image
}
else
{
return new {Status = false, Message = "Please provide your image." };
}
}
}
Now, (http://www.url.com/Images/UserImage/" + userId) user will get this url to render the user image.
This url basically hits the image controller and userImage action which will read image byte array from database and render image.
public class ImagesController : Controller
{
[Route("UserImage/{userId}")]
public ActionResult UserImage(int userId)
{
var user = _userRepository.GetUserInfo(userId);//Get user info
return new FileContentResult(user.ImageBytes, user.MimeType);
}
}
Datatype for MYSQL to save byte array is LONGBLOB.
Example
Properties class
public class UserInfo{
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
[EmailAddress]
public string Email { get; set; }
public string UserImage { get; set; }//Base64 string
public string ImageMimeType { get; set; }
}
API controller
[RoutePrefix("api/Account")]public class AccountController : ApiController
{
[HttpGet]
[Route("SaveUserInfo")]
[AppAuthorization]
public IHttpActionResult SaveUserInfo(UserInfo model)
{
if (model != null)
{
try
{
if (ModelState.IsValid)
{
var res = _userRepository.InsertUserInfo(model);
return Ok(res);
}
else
{
return Content<object>(HttpStatusCode.InternalServerError, new { Status = false, Message = "Invalid model." });
}
}
catch (Exception ex)
{
return Content<object>(HttpStatusCode.InternalServerError, new { Status = false, Message = ex.Message });
}
}
else
{
return Content<object>(HttpStatusCode.InternalServerError, new { Status = false, Message = "Please provide model." });
}
}
}
Business logic class
public class UserRepository : IUserRepository{
Dictionary<string, object> _sqlParams;
public object InsertUserInfo(UserInfo model)
{
if (model.UserPic != null && model.UserPic != "")
{
_sqlParams = new Dictionary<string, object>();
_sqlParams["FirstName "] = model.FirstName;
_sqlParams["LastName "] = model.LastName;
_sqlParams["Email"] = model.Email;
_sqlParams["ImageBytes"] = Convert.FromBase64String(model.UserImage);
_sqlParams["ImageName"] = model.FirstName;
_sqlParams["MimeType"] = model.PicMimeType;
long userId = DBUtility.ExecuteInsertSql(SqlQueryConstants.InsertUserInfo, _sqlParams);
return new {Status = true, Data = http://www.url.com:8098/UserImage/" + userId };//This url will render image
}
else
{
return new {Status = false, Message = "Please provide your image." };
}
}
}
Now, (http://www.url.com/Images/UserImage/" + userId) user will get this url to render the user image.
This url basically hits the image controller and userImage action which will read image byte array from database and render image.
Image Controller
[AllowCrossSiteJsonAttribute]public class ImagesController : Controller
{
[Route("UserImage/{userId}")]
public ActionResult UserImage(int userId)
{
var user = _userRepository.GetUserInfo(userId);//Get user info
return new FileContentResult(user.ImageBytes, user.MimeType);
}
}
No comments:
Post a Comment