public ActionResult Crear(Guid? id, Guid? TipoArchivoID) { if (id == null || TipoArchivoID == null) return new HttpStatusCodeResult(HttpStatusCode.BadRequest); var tipoArchivo = db.TipoArchivos.Find(TipoArchivoID); if (tipoArchivo == null) return HttpNotFound(); var pieza = db.Piezas.Find(id); if (pieza == null) return HttpNotFound(); var archivoPieza = new ArchivoPieza() { PiezaID = pieza.PiezaID, Status = true, TipoArchivoID = tipoArchivo.TipoArchivoID, TipoArchivo = tipoArchivo, Orden = pieza.ArchivosPiezas.Where(a => a.TipoArchivoID == tipoArchivo.TipoArchivoID).Count() + 1 }; archivoPieza.MostrarArchivos = new List<MostrarArchivo>(); foreach (var item in db.TipoMostrarArchivos.Where(a => a.Status).ToList()) { //crear en el archivo objetos temporales var tempMostrarArchivo = new MostrarArchivo() { ArchivoPiezaID = archivoPieza.ArchivoPiezaID, Status = false, TipoMostrarArchivo = item, TipoMostrarArchivoID = item.TipoMostrarArchivoID, }; archivoPieza.MostrarArchivos.Add(tempMostrarArchivo); } if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta)); //ViewBag.nombreArchivo = tipoArchivo.Nombre; //ViewBag.Lista_TipoMostrarArchivos = ; return PartialView("_Crear", archivoPieza); }
public ActionResult Crear(ArchivoPieza archivoPieza, HttpPostedFileBase FileArchivo) { #region Inicio de crear //mostrar los archivos no se guardara en el historial, por que su implementacion es muy costosa var listaMostrarArchivos = new List<MostrarArchivo>(); foreach (var item in db.TipoMostrarArchivos.Where(a => a.Status).ToList()) { string keyStatus = Request.Form["mosArc_" + item.TipoMostrarArchivoID + "_Status"]; bool valorStatus = keyStatus == "true,false" ? true : false; var tempMostrarArchivo = new MostrarArchivo() { Status = valorStatus, TipoMostrarArchivo = item, TipoMostrarArchivoID = item.TipoMostrarArchivoID }; listaMostrarArchivos.Add(tempMostrarArchivo); } #endregion try { #region Validaciones previas //comprobar las extensiones validas var tipoArchivo = db.TipoArchivos.Find(archivoPieza.TipoArchivoID); archivoPieza.Extension = Path.GetExtension(FileArchivo.FileName); if (!tipoArchivo.ExtensionesAceptadas.Replace(" ", "").Split(',').Any(a => "." + a == archivoPieza.Extension)) ModelState.AddModelError("", "Archivo no compatible."); if (FileArchivo == null) ModelState.AddModelError("", "Seleccione un archivo"); #endregion if (ModelState.IsValid) { //Crear la entidad #region pre-creacion de la entidad //validar que la carpeta del tipo de archivo exista if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta)); if (!Directory.Exists(Server.MapPath(tipoArchivo.Ruta + "thumb/"))) Directory.CreateDirectory(Server.MapPath(tipoArchivo.Ruta + "thumb/")); //Agregando valores que faltan archivoPieza.ArchivoPiezaID = Guid.NewGuid(); archivoPieza.NombreArchivo = Guid.NewGuid().ToString(); archivoPieza.Orden = db.ArchivoPiezas.Where(a => a.TipoArchivoID == archivoPieza.TipoArchivoID && a.PiezaID == archivoPieza.PiezaID).Count() + 1; archivoPieza.TipoArchivo = tipoArchivo; string rutaGuardar = Server.MapPath(archivoPieza.Ruta); FileArchivo.SaveAs(rutaGuardar); FileArchivo.InputStream.Dispose(); FileArchivo.InputStream.Close(); GC.Collect(); #region Creacion de la miniatura //generar la mini switch (archivoPieza.Extension) { //imagenes case ".jpg": case ".png": case ".tiff": Thumbnail mini = new Thumbnail() { OrigenSrc = rutaGuardar, DestinoSrc = Server.MapPath(archivoPieza.RutaThumb), LimiteAnchoAlto = 220 }; mini.GuardarThumbnail(); break; //videos case ".mp4": case ".avi": break; } #endregion #endregion db.ArchivoPiezas.Add(archivoPieza); db.SaveChanges(); //------ Logica HISTORIAL #region Generar el historial // Generar el historial var historialLog = HistorialLogica.CrearEntidad( archivoPieza, archivoPieza.GetType().Name, archivoPieza.ArchivoPiezaID.ToString(), User.UsuarioID, db); #endregion #region Guardar el historial //Guardar cambios si todo salio correcto if (historialLog != null) { //Guardar la entidad db.SaveChanges(); //Guardar el historial db.HistorialLogs.Add(historialLog); db.SaveChanges(); } else { throw new Exception(); } #endregion //------ foreach (var item in listaMostrarArchivos) { item.ArchivoPiezaID = archivoPieza.ArchivoPiezaID; db.MostrarArchivos.Add(item); db.SaveChanges(); } //Logica para terminar la instruccion #region logica finalizar AlertaSuccess(string.Format("Se guardo archivo {0} <b>{1}</b>", tipoArchivo.Nombre, archivoPieza.Titulo), true); string url = ""; bool esImagen = tipoArchivo.Temp == "imagen_clave" ? true : false; var tipoMostrarArchivo = db.TipoMostrarArchivos.FirstOrDefault(a => a.Nombre == "Completos"); if (esImagen) url = Url.Action("ContenedorImagen", "ArchivoPieza", new { id = archivoPieza.PiezaID, tipoMostrarArchivoID = tipoMostrarArchivo.TipoMostrarArchivoID, esCompleta = true }); else url = Url.Action("Lista", "ArchivoPieza", new { id = archivoPieza.PiezaID, TipoArchivoID = tipoArchivo.TipoArchivoID, esCompleta = true }); #endregion return Json(new { success = true, url = url, idPieza = archivoPieza.PiezaID, esImagen = esImagen }); } } catch (Exception) { ModelState.AddModelError("", "Error desconocido."); } archivoPieza.MostrarArchivos = listaMostrarArchivos; return PartialView("_Crear", archivoPieza); }