在Wakanda Server中上载实体属性的图像

时间:2017-09-28 19:34:55

标签: wakanda

我正在尝试从客户端上的文件上传图像,作为Wakanda实体名为thumbnail的图像属性的值。我在文档中使用the example,但我在浏览器中收到以下错误:

  

无法加载资源:服务器响应状态为404(未找到)   http://localhost:8081/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail?$ rawPict =图像/ JPEG

这是我的代码:

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

错误在catch e参数中返回。我检查过艺术品实体是否被正确检索,缩略图属性有upload方法,而this.testFileInputElement.files[0]是一个合适的文件对象。

2 个答案:

答案 0 :(得分:1)

第二次更新:该错误已在最新版本的Wakanda中修复。

更新:我在Wakanda Github上提交了一个错误,但它已被接受。您可以跟踪错误状态there。在此期间,请随时使用下面提供的解决方法。

我测试并得到相同的404错误。这似乎是一个错误。正确的文件上传网址应该在baseURL和数据类名称之间具有“ / rest ”,如: http://localhost:8081/rest/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail?$ rawPict =图像/ jpeg格式。

我发现的修复是将“/ rest”添加到web / node_modules / wakanda-client中“wakanda-client.no-primise.js”的第3454行:

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

这个修复对我有用。我将向团队报告错误和可能的修复。 enter image description here

答案 1 :(得分:0)

您是否尝试使用REST upload()上传图片?

我不建议将它用于生产用途,但它应该测试您是否可以将图像上传到该实体。

你也可以尝试下面我开发的代码,因为我有自己的API。

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();

}

然后在模块中安装一个index.js文件(在我的例子中,该模块被称为&#39; api&#39;),如下所示:

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;
}

然后在客户端发送一条消息给&#39; http://localhost:8081/api/v1/file/uploadFile,并在消息正文中显示该图像。

如果您愿意,欢迎您使用它,但如果您可以将图像上传到文件中,我主要将其作为一种测试方式。