public ActionResult Upload() { //se alterar aqui nao esqueça de mudar no metodo Crop() const int dimensaoMax = 200; if (Request.Files.Count != 1) { Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest; return(Json(new { error = "Bad Request" })); } if (Request.Files[0].ContentLength > 10 * 1024 * 1024) //10 MB { Response.StatusCode = (int)System.Net.HttpStatusCode.RequestEntityTooLarge; return(Json(new { error = "Too Large" })); } //gera um nome obfuscado mas previsivel var nomeFinal = "fullsize-" + NimbusUser.UserId; HMACMD5 md5 = new HMACMD5(NimbusConfig.GeneralHMACKey); md5.ComputeHash(Encoding.Unicode.GetBytes(nomeFinal)); nomeFinal = Base32.ToString(md5.Hash).ToLower() + ".jpg"; //3x o tamanho máximo var image = new ImageManipulation(Request.Files[0].InputStream); if (image.Width <= dimensaoMax && image.Height <= dimensaoMax) { //aumenta a imagem, mesmo perdendo definição image.Resize(dimensaoMax, dimensaoMax); } else if (image.Width <= 600 && image.Height <= 450) { //mantém a imagem no tamanho original } else { //reduz a imagem image.Resize(600, 450); } var imageStream = image.SaveToJpeg(); var blob = new AzureBlob(Const.Azure.AvatarContainer, nomeFinal); blob.UploadStreamToAzure(imageStream); var pathFinal = blob.BlockBlob.Uri.AbsoluteUri.Replace("https://", "http://").Replace("***REMOVED***", "storage.portalnimbus.com.br"); //adiciona query string para atrapalhar o cache =) pathFinal += "?x=" + DateTime.Now.ToFileTime().ToString(); //pega o nome do arquivo //nome final = onde vai ser armazendo //pega o caminho da pasta que vai ser gravado o arquivo e sava //retorna a img JA salva para o json colocar na tela return(Json(new { url = pathFinal })); }
public ActionResult Crop() { //se alterar aqui nao esqueça de mudar no metodo Crop() const int dimensaoMax = 200; int x1, x2, y1, y2 = 0; try { x1 = int.Parse(Request.Form["x1"]); x2 = int.Parse(Request.Form["x2"]); y1 = int.Parse(Request.Form["y1"]); y2 = int.Parse(Request.Form["y2"]); } catch { Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest; return(Json(new { error = "Invalid size" })); } int largura = x2 - x1; int altura = y2 - y1; //de acordo com o estilo no css if (largura < dimensaoMax || altura < dimensaoMax) { Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest; return(Json(new { error = "Image should be at least 130x130" })); } if (largura != altura) { Response.StatusCode = (int)System.Net.HttpStatusCode.BadRequest; return(Json(new { error = "Image should be square" })); } //pega a imagem do azure gerando um nome previsivel var nomeImagemOriginal = "fullsize-" + NimbusUser.UserId; HMACMD5 md5 = new HMACMD5(NimbusConfig.GeneralHMACKey); md5.ComputeHash(Encoding.Unicode.GetBytes(nomeImagemOriginal)); nomeImagemOriginal = Base32.ToString(md5.Hash).ToLower() + ".jpg"; var origBlob = new AzureBlob(Const.Azure.AvatarContainer, nomeImagemOriginal); var streamImgOrig = origBlob.DownloadToMemoryStream(); var img = new ImageManipulation(streamImgOrig); img.Crop(x1, y1, x2, y2); img.Resize(dimensaoMax, dimensaoMax); string pathFinal = UploadAvatar(img, NimbusUser.UserId.ToString()); using (var db = DatabaseFactory.OpenDbConnection()) { var user = db.Where <User>(u => u.Id == NimbusUser.UserId).FirstOrDefault(); //apaga imagem antiga //if (user.AvatarUrl != null && user.AvatarUrl != "/images/av130x130/person_icon.png") //{ // try // { // var uriAntigo = new Uri(user.AvatarUrl).Segments; // var blobAntigo = new AzureBlob(Const.Azure.AvatarContainer, uriAntigo[uriAntigo.Length - 1]); // blobAntigo.Delete(); // } // catch { } //} user.AvatarUrl = pathFinal; db.Save(user); //ATENÇÃO! Ao alterar informações presentes no NimbusUser, //lembre-se de atualizar no cache também! //Session[Const.UserSession] = DatabaseLogin.GetNimbusPrincipal(user); } //depois que salvar no azure retorna por json p mostrar na tela a imagem final origBlob.Delete(); //adiciona query string para atrapalhar o cache =) pathFinal += "?x=" + DateTime.Now.ToFileTime().ToString(); return(Json(new { url = pathFinal })); }