اذهب إلى المحتوى

السؤال

نشر

هل هناك طريقة أبسط لتحميل ملف من خادم nodejs غير الطريقة المستعملة في الاسفل

app.get('/get_intro', function(req, res){

    const file = __dirname + '/video/intro.mp4';

    const filename = path.basename(file);
    const mimetype = mime.lookup(file);
  
    res.setHeader('Content-disposition', 'attachment; filename=' + filename);
    res.setHeader('Content-type', mimetype);
  
    const filestream = fs.createReadStream(file);
    filestream.pipe(res);
  });

 

Recommended Posts

  • 0
نشر (معدل)

نعم يمكنك إستخدام Multer

قم بإنشاء متغير لإستدعاء multer مع الإعدادات الذي تريدها

ثم تقوم بإستدعاء هذا المتغير في المُدخل الثاني وتقوم بإستدعاء single إذا كان الملف واحد 

var express = require('express')
var multer  = require('multer')
var upload = multer({ dest: 'uploads/' }) // تحدد المكان الذي تريد وضع الملف فيه وتستطيع وضع إعدادات أخرى
 
var app = express()
 
app.post('/profile', upload.single('avatar'), function (req, res, next) {// إستدعاء الدالة في المُدخل الثاني
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any
})
 

 

تم التعديل في بواسطة عبدالمجيد الجرادي
  • 0
نشر

لاختصار الشيفرة يمكن استعمال download method:

app.get('/get_intro', function(req, res) {
   var file = "/video/intro.mp4";
    res.download(file) 
});

وإذا أردت حفظ الذاكرة بإغلاق الاتصال بعد مدة زمنية يمكن الاستفادة من الشيفرة التالية:

حيث أضفنا setTimeout مع عمل قناة اتصال createWriteStream

var http = require('http'),
    fs = require('fs');

var request = http.get("get_intro", function(response) {
    if (response.statusCode === 200) {
        var file = fs.createWriteStream("/video/intro.mp4");
        response.pipe(file);
    }
    // Add timeout.
    request.setTimeout(12000, function () {
        request.abort();
    });
});

وإن أردت استخدام call back function بعد انتهاء التحميل يمكن الاستعادنة ب:

var http = require('http');
var fs = require('fs');

var download = function(url, dest, cb) {
  var file = fs.createWriteStream(dest);
  var request = http.get(url, function(response) {
    response.pipe(file);
    file.on('finish', function() {
      file.close(cb);  // close() is async, call cb after close completes.
    });
  }).on('error', function(err) { // Handle errors
    fs.unlink(dest); // Delete the file async. (But we don't check the result)
    if (cb) cb(err.message);
  });
};

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...