Как отправить файлы 3D-модели клиенту, используя узел и / или express? - PullRequest
0 голосов
/ 20 января 2020

У меня есть файлы на 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().

Предложения, комментарии и даже критика приветствуются.

...