Загрузка изображения для атрибута сущности в Wakanda Server
Я пытаюсь загрузить изображение из файла на клиент в качестве значения атрибута изображения объекта Wakanda с именем thumbnail
, Я использую пример из документации, но я получаю следующую ошибку в браузере:
Не удалось загрузить ресурс: сервер ответил с состоянием 404 (не найдено) 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;
});
Ошибка возвращается в подвохе e
аргумент. Я проверил, что объект обложки извлекается правильно, атрибут миниатюры имеет upload
метод и this.testFileInputElement.files[0]
правильный объект File
2 ответа
2-е обновление: ошибка исправлена в последней версии Wakanda.
Обновление: я подал ошибку на Wakanda Github, и она была принята. Вы можете отслеживать статус ошибки там. В то же время, пожалуйста, не стесняйтесь использовать обходной путь, представленный ниже.
Я проверил и получаю ту же ошибку 404. Это похоже на ошибку. Правильный URL для загрузки файла должен иметь "/ rest" между baseURL и именем класса данных, например: http://localhost:8081/rest/Artwork(016A8CCE202847FA87DF78A27353121D)/thumbnail? $ RawPict=image/jpeg.
Исправление, которое я нашел, заключается в добавлении "/rest" в строку 3454 "wakanda-client.no-primise.js" в web/node_modules/wakanda-client:
MediaBaseService._buildUri = function (dataClassName, entityKey, attributeName) {
return '/rest/' + dataClassName + '(' + entityKey + ')' + '/' + attributeName;
};
Это исправление сработало для меня. Я сообщу об ошибке и возможном исправлении команде.
Вы пытались загрузить изображение с помощью 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;
}
Затем на стороне клиента отправьте сообщение в " http://localhost:8081/api/v1/file/uploadFile с изображением в теле сообщения.
Вы можете использовать его, если хотите, но я в основном включил один из способов тестирования, если вы можете загрузить изображение в файл.