cancel
Showing results for 
Search instead for 
Did you mean: 

Subir Documento API-Rest ( 5.2f)

nalvarez_colesc
Star Contributor
Star Contributor

Muy buenos dias, estoy teniendo problemas con el uso de la API, algunas cosas las logro sin problemas pero en otras me trabo de manera muy dura... En este caso estoy queriendo subir un documento a Alfresco mediante el metodo:

POST http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/{nodeId}/children

Intento con PostMan y tengo el siguiente error:

{
"error": {
"errorKey": "No disk space available",
"statusCode": 409,
"briefSummary": "04140029 No disk space available",
"stackTrace": "Por motivos de seguridad, ya no se muestra el seguimiento de la pila, pero se guarda la propiedad para versiones anteriores.",
"descriptionURL": "https://api-explorer.alfresco.com"
}
}

Aclaro: 

1) Espacio tengo de sobra

2) el {nodeId}, lo reemplazo por el id del nodo de destino

3) Tambien probe con http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children

4) Les paso como estoy armando el request en PostMan:

Si alguien podría ayudarme, les agradeceré mucho.... La idea es una vez que me funcione en PostMan, pasarlo a una petición desde Angular.

8 REPLIES 8

angelborroy
Community Manager Community Manager
Community Manager

Hola Angel, muy buenos dias, gracias por acercarme la info..... Sabres que estuve viendo y probando y logre que funcione por postman... Ahora el problema lo estoy teniendo en Angular, pordrias tirarme una mano para ver cual es mi error?

Servicio:

uploadDocumento() {
let options = {
headers:
{ 'Authorization': 'Basic YWRtaW46YWRtaW5wd2Q=',
'cache-control': 'no-cache',
'content-type': 'multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW' },

formData:
{ filedata:
{ value: '/home/nalvarez/logo2.jpg',
options: { filename: 'logo2.jpg', contentType: null } } } };

return this.peticion
.post('http://localhost:8080/alfresco/api/-default-/public/alfresco/versions/1/nodes/-my-/children',
options);

}

Ahora te paso el subscribe:

ngOnInit() {

this.upFile();
}

upFile() {
this.alfre.uploadDocumento().subscribe( respuesta => {
console.log(respuesta);
return this.data = respuesta;
});
}

Y por ultimo te muestro el error que recibo:

El código que compartí es solo para pruebas de concepto en cuanto al uso de la API, no es nada ni cercano a ser Prod... Por eso me atrevo a pedir de vuestra ayuda.... Quiero sumar un poco de info:

En postman me funciona ok la info tal cual pasaste...

Soy el Admin de alfresco, por lo cual cuento con acceso total al repositorio

Los datos suministrados como autenticacion, son validos para otros metodos post que tengo en el mismo servicio.

Desde ya muchas gracias....

¿Por qué no usas la API de ADF para eso?

https://www.alfresco.com/abn/adf/docs/tutorials/working-with-nodes-api-service/#creating-a-subfolder 

Hyland Developer Evangelist

La idea era usar la API Rest, ya que como son pruebas de conceptos la idea era probar esta, pero de no ser posible voy a ir por la que me indicas

Muchisimas gracias Angel !!!!!!!

calvo
Star Collaborator
Star Collaborator

Hola,

No se si has contemplado interactuar con el repositorio de documentos haciendo uso de CMIS.

Es una manera cómoda de trabajar con Alfresco desde aplicaciones externas; por ejemplo, desde una aplicación en C# -a través de OpenCMIS- es relativamente sencillo conectar con Alfresco y llevar a cabo operaciones como subida de documentos, creación de carpetas,...

Un saludo

  Hola Jose !!!!! muchas gracias por tu interes, te cuento que lo pude resolver, pero haviendo uso de la API nativa del alfresco. Dejo mi codigo por si a alguien le sirve.

Angular 7

Angular Material

Bootstrap

1° Servicio:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { HttpHeaders } from '@angular/common/http';
import { map } from 'rxjs/operators';


@Injectable({
providedIn: 'root'
})
export class AlfrescoService {

constructor( private peticion: HttpClient ) { }

public ticket = 'TICKET_ee7d1d5bd60feda9aae2f07cc8be00760a47c39f';
public servidor = 'localhost';
public puerto = '8080';
public alfresco = `http://${this.servidor}:${this.puerto}`;
   uploadFile( formData ) {
      const headers = {
        authorization: 'Basic YWRtaW46YWRtaW5wd2Q=',
        'cache-control': 'no-cache',
        enctype: 'multipart/form-data'
      };
   return this.peticion.post( `${this.alfresco}/alfresco/service/api/upload?alf_ticket=${this.ticket}`, formData, { headers } );
   }
}

2° Componente:

2.1) TS

import { Component, OnInit, Input } from '@angular/core';
import { AlfrescoService } from '../../servicios/alfresco.service';
import { ActivatedRoute, Router } from '@angular/router';
@Component({
selector: 'app-upload',
templateUrl: './upload.component.html',
styleUrls: ['./upload.component.css']
})
export class UploadComponent implements OnInit {

@Input() padreId; // Recibe el nodeId del Padre
@Input() nombre; // Recibe el nombre de la carpeta Padre

isLinear = false;
firstFormGroup: FormGroup;
secondFormGroup: FormGroup;

public cargando = true;
public uploadFiles: Array < File > ;

constructor( public alfresco: AlfrescoService,
public ruta: ActivatedRoute,
public router: Router,
public dialog: MatDialog,
private _formBuilder: FormBuilder,
) { }

ngOnInit() {
   this.padreId = this.ruta.snapshot.params.padre;
   this.nombre = this.ruta.snapshot.params.carpeta;
 
   this.formSubir = new FormGroup({
        file: new FormControl('', [Validators.required ]),
   });
  }
/*---- Para detectar el cambio cuando seleccionan un archivo ----*/
fileChange( event ) {
this.uploadFiles = event.target.files;
}
/*---- Para subir el Documento ----*/
   upload() {
     const formData: FormData = new FormData();
     formData.append('filedata', this.uploadFiles[0]);
     formData.append('destination', this.padreId);
     formData.append('uploaddirectory', this.nombre);
    this.alfresco.uploadFile( formData ).subscribe( respuesta => console.log(respuesta) )
   }

2.2)HTML

   <h1>SELECCION DE ARCHIVO !!!!</h1>
   <div class="cajaConfirmar">
      <h3>Seleccione el Archivo a Subir</h3>
     <p> El archivo que seleccione sera el contenido de su Documento dentro de Alfresco.</p>
   </div>
   <form >
      <input class="campoModal btnMostrar uploadFile" type="file" (change)="fileChange($event)" required placeholder="Subir" formControlName="file">
   </form>
   <div>
   <button  type="button"
                 class="btn btn-success btnMostrar sombrasBtn"
                 (click)="upload()">Subir
   </button>

mdva171
Champ in-the-making
Champ in-the-making

buenas me podrias ayudar a como solucionastes el problema con las apis de documento estoy iniciando y me gustaria aprender  y ver como lo solucionastes