У меня есть файлы на amazon S3, и я хотел бы отправить их клиенту (вошедшему в систему пользователю), когда будет сделан запрос. У меня есть рабочая настройка для обычных текстовых файлов, но я не могу получить тот же результат для 3D-моделей (в формате ply
).
Код, который работает для текстовых файлов:
bucket_name = "..."
key_string = "..."
app.post("/textfile", function(req, res, next){
var s3 = new AWS.S3();
s3.getObject(
// key_string points to a .txt file on S3
{ Bucket: bucket_name, Key: key_string },
function (error, data) {
res.send(data.Body);
}
);
});
На стороне клиента у меня есть:
fetch('localhost:/textfile', {
method: "POST",
header: {
"Content-Type": "application/json",
}
})
.then(function(response) {
return response.text();
})
.then(function(res_text) {
var string_blob = new Blob( [ res_text], { type: 'text/plain'} );
file_object = new File([string_blob ], "filename.txt")
// loadFile reads a file object and return a Promise object
// it is provided by another library http://nglviewer.org/ngl/api/class/src/stage/stage.js~Stage.html#instance-method-loadFile
loadFile(file_object);
});
};
Однако я не могу получить тот же результат, когда я попробуйте отправить файл model.ply
. Я пытаюсь сгенерировать файловый объект, который я могу передать PLYLoader
примерно так:
var loader = new THREE.PLYLoader();
// ply_file_object generated similar to the code above (for file_object)
loader.load(ply_file_object);
До сих пор я пытался изменить "Content-Type"
на model/ply
, application/octet-stream
, application/octet-binary
но никто из них не работает, и это сводит меня с ума. Моим идеальным решением является отправка данных клиенту без загрузки их на сервер, поэтому я пока не пробовал функциональность res.sendFile()
.
Предложения, комментарии и даже критика приветствуются.