2017-09-28 4 views
0

Ich versuche, ein Bild aus einer Datei auf dem Client als den Wert eines Bildattributs der Wakanda-Entität mit dem Namen thumbnail hochzuladen. Ich verwende the example aus der Dokumentation, aber ich bin immer die folgende Fehlermeldung im Browser:Hochladen eines Bildes für ein Entitätsattribut in Wakanda Server

fehlgeschlagen Ressource laden: der Server mit einem Status von 404 geantwortet (nicht gefunden) http://localhost:8081/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail $ rawPict = image/

jpeg

Hier ist mein Code:

ds.Artwork.find(artworkId).then(artwork => { 
    return artwork.thumbnail.upload(this.testFileInputElement.files[0]); 
}).catch(e => { 
    debugger; 
}); 

der Fehler in dem Fang e Argument zurückgegeben wird. Ich habe überprüft, dass die Artwork-Entity ordnungsgemäß abgerufen wird, das Thumbnail-Attribut hat eine upload-Methode und this.testFileInputElement.files[0] ist ein ordnungsgemäßes Dateiobjekt.

+0

Dieser Fehler wurde in der Version 2.3.0 von Wakanda behoben – hamzahik

Antwort

0

Update: Ich habe einen Fehler auf Wakanda Github eingereicht und es wurde akzeptiert. Sie können den Fehlerstatus there verfolgen. In der Zwischenzeit können Sie die unten beschriebene Problemumgehung verwenden.

Ich getestet und bekomme den gleichen 404 Fehler. Dies scheint ein Fehler zu sein. Die korrekte URL zum Hochladen der Datei sollte "/rest" zwischen baseURL und dem Namen der Datenklasse lauten: http://localhost:8081/rest/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail? $ RawPict = image/jpeg.

Das Update gefunden ist "/ Rest" hinzufügen, um die Leitung 3454 von "wakanda-client.no-primise.js" in web/node_modules/wakanda-Client:

MediaBaseService._buildUri = function (dataClassName, entityKey, attributeName) { 
     return '/rest/' + dataClassName + '(' + entityKey + ')' + '/' + attributeName; 
}; 

Dieses Update gearbeitet mich. Ich werde den Fehler und die mögliche Reparatur dem Team melden. enter image description here

0

Haben Sie versucht, das Bild mit REST upload() hochzuladen?

Ich würde es nicht für den Produktionseinsatz empfehlen, aber es sollte testen, ob Sie ein Bild auf diese Entität hochladen können.

Sie könnten auch den Code unter dem ich entwickelt habe, weil ich meine eigene API habe.

function uploadFile(request,response){ 

response.contentType = 'application/json'; 

var i, 
    j=1, 
    nameTemp, 
    img, 
    files=[], 
    returnJSON = [], 
    newName, 
    folder, 
    filePath; 

folder = getFolder('path')+'/database/data/uploads/' 
for(i=0;i<request.parts.length;i++){ 

    filePath = folder + request.parts[i].fileName.replace(/\s/g,'_'); 
    files.push(new File(filePath)); 
    returnJSON[i]={}; 
    returnJSON[i].name = request.parts[i].name 
    returnJSON[i].value = request.parts[i].fileName; 

    var documentName = request.parts[i].name 

    //saveFileToData(filePath, imgName); 

} 

for(i=0;i<files.length;i++){ 
    j=1; 
    var filePath; 
    if(!files[i].exists){ 



     myBinaryStream = BinaryStream(files[i],'Write'); 
     myBinaryStream.putBlob(request.parts[i].asBlob); 
     myBinaryStream.close(); 
     saveFileToData(files[i].path, files[i].name); 

    }else{ 
     while(files[i].exists){ 
      nameTemp = files[i].name.replace(/\s/g,'_'); 
      filePath = folder+files[i].nameNoExt.replace(/\s/g,'_')+j+'.'+files[i].extension 
      files[i] = new File(filePath); 
      newName = files[i].name; 
      if(files[i].exists){ 
       files[i] = new File(folder+nameTemp); 
      } 
      j++; 
     } 
     myBinaryStream = BinaryStream(files[i],'Write'); 
     myBinaryStream.putBlob(request.parts[i].asBlob); 
     myBinaryStream.close(); 
     returnJSON[i].value = files[i].name; //this is the fileName 

     saveDocumentToData(files[i].path, nameTemp); 

    } 
} 

return returnOK(returnJSON); 
} 

function returnOK (returnJSON) { 
    returnJSON = JSON.stringify(returnJSON); 
    return returnJSON; 
} 

function saveDocumentToData(path, documentName){ 

    var theDocumentFile = loadFile(path); 



var theDocument = theDocumentFile.asPicture; 

var documentEntity = ds.Document.createEntity(); 
    documentEntity.File = path; 
documentEntity.name = FileName; 
documentEntity.save(); 

} 

Dann installieren Sie es mit einer index.js Datei in einem Modul so etwas wie diese (in meinem Fall das Modul ‚api‘ genannt wird):

exports.postMessage = function (message) { 

var serviceFile = new File(module.filename); 
var parent = serviceFile.parent; 
var fileFile = new File(parent, 'file-handlers.js'); 

switch (message.name){ 
    case 'httpServerDidStart': 
     httpServer.addRequestHandler("^/api/v1/file", fileFile.path, "fileHandler"); 
     break; 
    case 'httpServerWillStop': 
      httpServer.removeRequestHandler("^/api/v1/file", adminFile.path, "fileHandler"); 
     break; 
} 

Dann auf der Client-Seite eine Nachricht zu 'http://localhost:8081/api/v1/file/uploadFile mit dem Bild im Nachrichtentext.

Sie können es gerne verwenden, wenn Sie wollen, aber ich habe hauptsächlich als eine Möglichkeit des Testens aufgenommen, wenn Sie das Bild in die Datei hochladen können.

Verwandte Themen