Как вернуть файлы, сохраненные в файловой системе с Node js и Multer, в угловой интерфейс? - PullRequest
0 голосов
/ 17 мая 2018

Я новичок в программировании с использованием угловых и узлов js, и мне нужно вернуть файлы, сохраненные в файловой системе (обрабатываются серверной частью в узле js), во внешний интерфейс, чтобы дать пользователю возможностьпросматривая их или загружая их, чтобы сохранить их, я использовал промежуточное программное обеспечение Multer, но чтобы вернуть их для внешнего интерфейса, я не нашел эффективного решения.Я попытался с помощью fs создать буферный массив, но это не сработало.Кто-нибудь знает эффективное решение?

В запросе будут переданы параметры, чтобы определить, какой файл возвращается, но сейчас я тестирую со статическим файлом.

Мой запрос:

let headers: Headers = new Headers(); 
headers.append('Content-type', 'application/json'); 
headers.append('Authorization', token); 
let link = ${URL_AuthAPI}/systemUsers/list; 

let body = JSON.stringify({ obj }); 
let option = new RequestOptions({ headers: headers }); 
return this.http.post(link, body, option).map((resposta: Response)=> resposta);

Сервер Nodejs:

var filePath = path.join("/home", 'rg.png');
  var stat = fileSystem.statSync(filePath);

    res.writeHead(200, {
        'Content-Type': 'image/png',
        'Content-Length': stat.size,
        // 'Content-Disposition': 'attachment ; filename=teste.png'
    });

    var readStream = fileSystem.readFileSync(filePath);

    readStream.on('data', function(data) {
    response.write(data);
});

readStream.on('end', function() {
    response.end();        
});

Код компонента:

this.systemUsersService.listUsers(this.token, null).subscribe((apiResponse) => {

      var data = apiResponse['_body'];
      console.log(data);

    }, (error: any) => {

    }
    );

1 Ответ

0 голосов
/ 17 мая 2018
  • Если файлы, которые вы хотите разрешить пользователю загружать, являются общедоступными, тогда наилучшим вариантом будет отправка (из вашего бэкенда) массива URL-адресов файлов в угловое приложение (в случае изображений для создания правильного из внешнего интерфейса)
  • Если вы хотите загрузить изображение с помощью узла, вы можете прочитать файл (fs.createReadStream) и отправить соответствующий заголовок перед выполнением «отправки». Взгляните на файл отправки Nodejs в ответ это действительно хороший ответ
  • В конце концов, моя личная рекомендация - «не отправлять файлы с использованием узла», вы можете использовать nginx для отправки статического содержимого
...