为 Wakanda 服务器中的实体属性上传图像
Uploading an image for an entity attribute in Wakanda Server
我正在尝试从客户端上的文件上传图像作为名为 thumbnail
的 Wakanda 实体图像属性的值。我正在使用文档中的 the example,但在浏览器中出现以下错误:
Failed to load resource: the server responded with a status of 404 (Not Found)
http://localhost:8081/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail?$rawPict=image/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]
是一个正确的文件对象。
您是否尝试过使用 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 文件安装它(在我的例子中,模块称为 'api'),如下所示:
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;
}
然后在客户端POST发送消息到'http://localhost:8081/api/v1/file/uploadFile,消息正文中包含图像。
如果您愿意,欢迎您使用它,但我主要将其作为一种测试方法包含在内,以测试您是否可以将图像上传到文件。
第二次更新:该错误已在最新版本的 Wakanda 中修复。
更新:我在 Wakanda Github 上提交了一个错误,它已被接受。您可以跟踪错误状态 there。同时,请随时使用下面提供的解决方法。
我测试并得到相同的 404 错误。这似乎是一个错误。正确的文件上传 URL 应该在 baseURL 和数据类名称之间有“/rest”,例如:
http://localhost:8081/rest/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail?$rawPict=image/jpeg.
我找到的修复方法是将“/rest”添加到 web/node_modules/wakanda-client 中 "wakanda-client.no-primise.js" 的第 3454 行:
MediaBaseService._buildUri = function (dataClassName, entityKey, attributeName) {
return '/rest/' + dataClassName + '(' + entityKey + ')' + '/' + attributeName;
};
这个修复对我有用。我将向团队报告错误和可能的修复。
我正在尝试从客户端上的文件上传图像作为名为 thumbnail
的 Wakanda 实体图像属性的值。我正在使用文档中的 the example,但在浏览器中出现以下错误:
Failed to load resource: the server responded with a status of 404 (Not Found) http://localhost:8081/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail?$rawPict=image/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]
是一个正确的文件对象。
您是否尝试过使用 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 文件安装它(在我的例子中,模块称为 'api'),如下所示:
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;
}
然后在客户端POST发送消息到'http://localhost:8081/api/v1/file/uploadFile,消息正文中包含图像。
如果您愿意,欢迎您使用它,但我主要将其作为一种测试方法包含在内,以测试您是否可以将图像上传到文件。
第二次更新:该错误已在最新版本的 Wakanda 中修复。
更新:我在 Wakanda Github 上提交了一个错误,它已被接受。您可以跟踪错误状态 there。同时,请随时使用下面提供的解决方法。
我测试并得到相同的 404 错误。这似乎是一个错误。正确的文件上传 URL 应该在 baseURL 和数据类名称之间有“/rest”,例如: http://localhost:8081/rest/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail?$rawPict=image/jpeg.
我找到的修复方法是将“/rest”添加到 web/node_modules/wakanda-client 中 "wakanda-client.no-primise.js" 的第 3454 行:
MediaBaseService._buildUri = function (dataClassName, entityKey, attributeName) {
return '/rest/' + dataClassName + '(' + entityKey + ')' + '/' + attributeName;
};
这个修复对我有用。我将向团队报告错误和可能的修复。