it-swarm.asia

Node Express إرسال ملفات الصور كاستجابة API

لقد غوغل هذا ولكن لم أجد إجابة ولكن يجب أن يكون مشكلة شائعة. هذا هو نفس السؤال مثل طلب عقدة (قراءة دفق الصورة - توجيه الإخراج إلى الاستجابة) ، والتي لم تتم الإجابة عليها.

كيف يمكنني إرسال ملف صورة كاستجابة Express .send ()؟ أحتاج إلى تعيين عناوين URL مريحة للصور - ولكن كيف يمكنني إرسال الملف الثنائي بالرؤوس الصحيحة؟ على سبيل المثال،

<img src='/report/378334e22/e33423222' />

المكالمات...

app.get('/report/:chart_id/:user_id', function (req, res) {
     //authenticate user_id, get chart_id obfuscated url
     //send image binary with correct headers
});
41
metalaureate

يوجد api في Express.

res.sendFile

app.get('/report/:chart_id/:user_id', function (req, res) {
    // res.sendFile(filepath);
});

http://expressjs.com/en/api.html#res.sendFile

63
Po-Ying Chen

الحل المناسب مع التدفقات ومعالجة الأخطاء أدناه:

const fs = require('fs')
const stream = require('stream')

app.get('/report/:chart_id/:user_id',(req, res) => {
  const r = fs.createReadStream('path to file') // or any other way to get a readable stream
  const ps = new stream.PassThrough() // <---- this makes a trick with stream error handling
  stream.pipeline(
   r,
   ps, // <---- this makes a trick with stream error handling
   (err) => {
    if (err) {
      console.log(err) // No such file or any other kind of error
      return res.sendStatus(400); 
    }
  })
  ps.pipe(res) // <---- this makes a trick with stream error handling
})

مع Node الأقدم ثم 10 ، ستحتاج إلى استخدام pump بدلاً من خط الأنابيب.

1
kharandziuk