Возврат файла в виде URL в формате json RestApi - PullRequest
0 голосов
/ 18 апреля 2019

https://drive.google.com/file/d/1hxqXCTVZYRJheXNi-WFz8K2ksLZiMNTY/view?usp=drivesdk

Я создаю API-интерфейс restfull, в котором пользователь загружает и скачивает какой-то файл с сервера. У меня есть система, в которой пользователь загружает файл (скажем, изображение) на сервер. Я успешно сделал это, сохранив этот файл в monogo db gridfs.

Теперь я хочу создать запрос на получение, в котором пользователь должен получить файл способом, упомянутым на изображении выше. Я не знаю, как отправить файл в виде поля. Который содержит URL файла.

Если это возможно с любым, пожалуйста, направьте меня. Большое спасибо. У меня недостаточно репутации для публикации фотографии, поэтому я прикрепил ссылку на диск. спасибо!

1 Ответ

0 голосов
/ 24 апреля 2019

хорошо, так что спустя почти неделю я нашел решение.который я искал.я пытался вернуть пользователю отображаемое изображение в виде URL, который будет отдельной конечной точкой для нашего API.так что вы можете легко получить изображение через этот URL.

, поэтому я создал маршрут для целей аутентификации, в котором я получаю полный URL-адрес из запроса, также содержащего имя файла.метод аутентификации обрабатывает систему аутентификации, которая аутентифицирует пользователя и затем передает идентификатор пользователя в метод downloadimage вместе с полным URL-адресом, который просто запросит базу данных для пользователя, и назначит свойству dp (display picture) URL-адрес дляизображение, которое будет иметь полную конечную точку, а также имя файла.я также прикрепил функцию, которая обрабатывает URL изображения позже.

async function downloadImage(id, fullUrl) {
  let comUrl;
  let user = await User.findById(id).select('-hash');

  // console.log(user);
  if (user.dp) {

    comUrl = fullUrl + user.dp


  }

 function authenticate(req, res, next) {
 var fullUrl = req.protocol + '://' + req.get('host');
    let imageurl = await downloadImage(user.id, fullUrl);
        if (imageurl) {
          console.log(imageurl)
          userWithoutHash.dp = imageurl;

        }
}

router.get('/file/:filename', (req, res) => {

    gfs.model.readById(new mongoose.Types.ObjectId(req.params.filename), (err, file) => {

        console.log(file)
      // Check if file
      if (!file || file.length === 0) {
        return res.status(404)  .json({
          err: 'No file exists'
        });
      }
      const { Readable } = require('stream');
      // Check if image
      const stream = new Readable();
      stream.push(file);
      stream.push(null);

        stream.pipe(res);



    });
  });

вывод: будет так

 { "dp": "http://localhost:4000/file/5cc0905839355d013c040794"}

Я надеюсь, я отвечу на вопрос выше, если возникла путаница илиНужна помощь с этим, дайте мне знать спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...