SubirArchivoController.php 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. <?php
  2. namespace v1\controllers;
  3. use common\data\Respuesta;
  4. use common\rest\AuthController;
  5. use Ramsey\Uuid\Uuid;
  6. use v1\models\Media;
  7. use Yii;
  8. use yii\db\Expression;
  9. use yii\web\NotFoundHttpException;
  10. use yii\web\Response;
  11. use yii\web\UploadedFile;
  12. class SubirArchivoController extends AuthController {
  13. public function actionGuardar() {
  14. if (!$this->req->isPost) {
  15. throw new NotFoundHttpException();
  16. }
  17. $usuario = $this->usuario;
  18. $this->res->format = Response::FORMAT_JSON;
  19. $archivo = UploadedFile::getInstanceByName('archivo');
  20. if ($archivo === null) {
  21. return (new Respuesta())
  22. ->esError()
  23. ->mensaje("No se recibió el archivo");
  24. }
  25. $sec = Yii::$app->getSecurity();
  26. $base = Yii::getAlias("@app") . "/web/assets/";
  27. $ruta = "recurso/";
  28. if(!is_dir($base . $ruta)) {
  29. mkdir($base . $ruta);
  30. }
  31. $ruta .= date("Y/");
  32. if(!is_dir($base . $ruta)) {
  33. mkdir($base . $ruta);
  34. }
  35. $ruta .= date("m/");
  36. if(!is_dir($base . $ruta)) {
  37. mkdir($base . $ruta);
  38. }
  39. $dominio = Yii::$app->getRequest()->getHostInfo() . "/assets/";
  40. do {
  41. $nombreArchivo = str_replace("-", "", $ruta . $sec->generateRandomString());
  42. if($archivo->extension) {
  43. $nombreArchivo .= "." . $archivo->extension;
  44. }
  45. } while(is_file($base . $nombreArchivo));
  46. if(!$archivo->saveAs($base . $nombreArchivo)) {
  47. return (new Respuesta())
  48. ->mensaje("Ocurrió un problema al guardar el archivo");
  49. }
  50. $uuid = Uuid::uuid1();
  51. $modelo = new Media();
  52. $modelo->creado = new Expression('now()');
  53. $modelo->idUsuario = $usuario->id;
  54. $modelo->uuid = $uuid->toString();
  55. $modelo->nombre = $archivo->name;
  56. $modelo->extension = $archivo->extension;
  57. $modelo->ruta = $dominio.$nombreArchivo;
  58. $modelo->load($this->req->getBodyParams(), '');
  59. if (!$modelo->save()) {
  60. return (new Respuesta($modelo))
  61. ->mensaje("Hubo un problema al guardar Media");
  62. }
  63. $modelo->refresh();
  64. // $modelo->save();
  65. return (new Respuesta())
  66. ->mensaje("Archivo subido correctamente")
  67. ->detalle($modelo);
  68. // ->detalle(["idUsuario" => $usuario->id, "uuid" => $sec->generateRandomString(), "nombre" => $archivo->name, "extension" => $archivo->extension, "ruta" => $dominio . $nombreArchivo ]);
  69. // ->detalle(["ruta" => $dominio . $nombreArchivo]);
  70. }
  71. }