Meteor JS, React перенаправление пользовательских изображений / Meteor WebApp - PullRequest
0 голосов
/ 25 августа 2018

ребята,

Я пытаюсь сделать персонифицированное перенаправление изображений в метеоре, чтобы я мог использовать более короткие пользовательские ссылки, которые перенаправляют меня на изображения, загруженные в amazon:

WebApp.connectHandlers.use(function(request, response, next) {
      if (~request._parsedUrl.path.indexOf('/image') > -1) {
        response.writeHead(301, {
          Location:
            'https://s3.eu-central-1.amazonaws.com/my-prepo/folder/imageName123456.jpg',
        });
        response.end();
      }
      next();
    });

Я могу очень хорошо использовать его на внешних страницах, таких как jsfiddle, только когда пишу:

<img src="http://localhost:4003/image" />

Но когда я использую его в своем интерфейсе реакции, как <img src="/image" />, тогда изображение не появляется, и на сервере возникает ошибка:

E20180825-11:59:12.452(3) (webapp_server.js:799) Error running template: Error: Can't set headers after they are sent.
at validateHeader (_http_outgoing.js:491:11)
at ServerResponse.setHeader (_http_outgoing.js:498:3)
at ServerResponse.setWriteHeadHeaders (/home/bux/.meteor/packages/webapp/.1.5.0.1phld1g.dmro++os+web.browser+web.cordova/npm/node_modules/on-headers/index.js:82:19)
at ServerResponse.writeHead (/home/bux/.meteor/packages/webapp/.1.5.0.1phld1g.dmro++os+web.browser+web.cordova/npm/node_modules/on-headers/index.js:41:36)
at getBoilerplateAsync.then (packages/webapp/webapp_server.js:791:13)
at /home/bux/.meteor/packages/promise/.0.10.2.12fknlz.thdv++os+web.browser+web.cordova/npm/node_modules/meteor-promise/fiber_pool.js:43:40

Что я могу сделать, чтобы просто использовать собственную ссылку для отображения изображения, например <img src="/image"?

Большое спасибо за совет С наилучшими пожеланиями Bukso

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

Я исправил проблему следующим образом:

WebApp.connectHandlers.use(function(req, res, next) {
  const reqUrlParts = req.url.split('/');
  let urlToRedirect = 0;
  if (reqUrlParts[1] && reqUrlParts[1] === 'files') {
    urlToRedirect = fileHandler.handleUrl(req);
  }
  if (urlToRedirect) {
    res.writeHead(301, {
      Location: urlToRedirect,
    });
    res.end();
  } else {
    next();
  }
});

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

0 голосов
/ 26 августа 2018

Прежде всего, я вижу, что вы получаете свои изображения с S3, в то время как вы, вероятно, должны получать их через Cloudfront.Основным отличием является кеширование.Кроме того, когда вы сохраняете изображения в S3, убедитесь, что установлены «expire» и «cache-control», чтобы ваши пользователи кэшировали изображения на локальных устройствах (если вы этого хотите).С Cloudfront вы можете иметь ссылку, например assets.yourdomain.com/....your asset.

Простой и безопасный способ - объявить глобальную переменную, такую ​​как

var IMAGE = 'https//........your cloudfront root '

ив коде вы получите что-то вроде:

<img src={`${IMAGE}/${imagename}.jpg`}

Если вам нужна полная безопасность и полная «неосторожность» ссылок / источников изображений, вы можете использовать очень поддерживаемый пакет Ostrio Files Meteor.

P

enter image description here

...