2015-10-22 10 views
9

पर फ़ाइल को सहेज नहीं सकता है मैं अपने Node.js-express अनुप्रयोग के साथ Resumable.js का उपयोग कर रहा हूं। मैं बात मैं कहाँ पता फ़ाइल स्थानांतरण सफल रहा था क्योंकि मैं (req.body) console.log कर सकते हैं करने के लिए प्राप्त कर सकते हैं और इस नीचे देखें ...Resumable.js सर्वर साइड निर्देशिका

{ resumableChunkNumber: '77', 
    resumableChunkSize: '1048576', 
    resumableCurrentChunkSize: '1064195', 
    resumableTotalSize: '80755971', 
    resumableType: '', 
    resumableIdentifier: '80755971-humanfastq', 
    resumableFilename: 'human.fastq', 
    resumableRelativePath: 'human.fastq', 
    resumableTotalChunks: '77' } 

प्रलेखन न कि जो इस के बाद करने के लिए के बारे में अस्पष्ट है बिंदु। मुझे इस फ़ाइल को अपने सर्वर पर एक निर्देशिका में सहेजने की ज़रूरत है। इसे पूरा करने के तरीके के बारे में कोई भी मदद की सराहना की जाएगी। धन्यवाद!

+0

कोई भी जिथब उदाहरण अद्भुत होगा .. – Nodedeveloper101

+0

ठीक है, फ़ाइल स्वयं 'req.files.file' में स्थित है ... तो मेरे पास एक जावास्क्रिप्ट चर है जो एक फ़ाइल है .. var file = req.files.file; .... मैं इस चर को अपने सर्वर पर किसी विशिष्ट निर्देशिका में फ़ाइल के रूप में कैसे सहेजूं? – Nodedeveloper101

+0

मुझे पता चला कि 'fs' का उपयोग कर सर्वर पर .txt फ़ाइलों को कैसे लिखना है। तो मैं सर्वर पर फाइलें लिख सकता हूं। और मैं फ़ाइल के बारे में console.log() डेटा कर सकता हूं। लेकिन यह पता नहीं लगा सकता कि मुझे fs.writeFile (फ़ाइल नाम, फ़ाइल, कॉलबैक) में कौन सा ऑब्जेक्ट पास करना है, जो वास्तव में फ़ाइल है ... अभी यह सिर्फ [ऑब्जेक्ट ऑब्जेक्ट] बचाता है – Nodedeveloper101

उत्तर

1

मैं Resumable.js का उपयोग नहीं कर रहा हूं लेकिन कुछ समान है और यहां यह है कि मैं इसे नोडज/एक्सप्रेस सर्वर में कैसे करता हूं। आप यहां सर्वर सर्वर के अधिक से अधिक देख सकते हैं: https://github.com/MichaelLeeHobbs/roboMiner/tree/master/server/api/world हालांकि ध्यान रखें कि यह पूर्ण नहीं है और प्रयोगात्मक है। नीचे दिया गया कोड केवल एक नंगे उदाहरण है।

import move from '../../libraries/fsMove.js'; 

    export function create(req, res) { 
     var file = req.files.file; 
     console.log(file.name); 
     console.log(file.type); 
     console.log(file.path); 
     console.log(__dirname); 
     move(file.path, __dirname + '/../../uploads/worlds/' + file.originalFilename, function(err){ 
     if (err) { 
      console.log(err); 
      handleError(res)(err); 
      return; 
     } 
     World.createAsync(req.body) 
      .then(responseWithResult(res, 201)) 
      .catch(handleError(res)); 
     }); 
    } 

    // fsMove.js 
    // http://stackoverflow.com/questions/8579055/how-i-move-files-on-node-js/29105404#29105404 
    var fs = require('fs'); 

    module.exports = function move (oldPath, newPath, callback) { 
     fs.rename(oldPath, newPath, function (err) { 
     if (err) { 
      if (err.code === 'EXDEV') { 
      copy(); 
      } else { 
      callback(err); 
      } 
      return; 
     } 
     callback(); 
     }); 

     function copy() { 
     var readStream = fs.createReadStream(oldPath); 
     var writeStream = fs.createWriteStream(newPath); 

     readStream.on('error', callback); 
     writeStream.on('error', callback); 
     readStream.on('close', function() { 

      fs.unlink(oldPath, callback); 
     }); 

     readStream.pipe(writeStream); 

     } 
    }; 
4

कोई विशेषज्ञ नहीं, लेकिन मैंने इसे आज़माया और आपके लिए एक उदाहरण काम किया। आपने अपने प्रश्न में पर्याप्त जानकारी प्रदान नहीं की है, इसलिए मैं खरोंच से शुरू करने जा रहा हूं।

मैंने आधिकारिक github रेपो और प्रदान किए गए नमूनों का पालन किया और मुझे फ़ाइल निर्देशिका को एक विशिष्ट निर्देशिका में सहेजने के लिए कुछ बदलाव करना पड़ा, फिर उन हिस्सों को एक साथ वापस सिलाई करने के लिए और अधिक अनावश्यक हटाने के लिए और अधिक tweak बाद में भाग। स्पष्ट रूप से ये सभी tweaks कोड में प्रदान किए गए संकेत हैं, और कहीं और मैंने ब्राउज़ किया है। स्पष्ट रूप से flow.js एक समान तंत्र का उपयोग भी कर रहा है (पूरी तरह से सुनिश्चित नहीं)।

मुझे मूल रूप से ब्राउज़र से फ़ाइलों को अपलोड करने में सक्षम होने के लिए app.js को नमूने में बदलने की आवश्यकता है और फिर उन्हें स्थानीय रूप से सहेजें।

  1. दर्रा निर्देशिका स्थान से शुरू करने योग्य है, जहां फ़ाइल मात्रा में जोड़ा जाना चाहिए
  2. आवश्यक शर्तों और आदेश प्रदान करें, ताकि जब मात्रा अपलोड किया जाता है, तो आप एक लिखने स्ट्रीम बनाने के लिए और फिर मात्रा एक साथ सिलाई और उन्हें बचाने के लिए पुन: प्रारंभ योग्य का उपयोग मूल फ़ाइल के रूप में।
  3. अंत में हटाने के सभी हिस्सा

निर्देश gist उपयोग करने के लिए एक्सप्रेस-ऐप (आप आधिकारिक GitHub नमूना चेकआउट और परिवर्तन करने या आप नीचे दिए गए निर्देशों का पालन कर सकते कर सकते हैं) काम कर पाने के:

  1. एक निर्देशिका
  2. बनाएं निर्देशिका में app.js, सार से resumable.js और पुन: प्रारंभ योग्य-Node.js बनाएं
  3. कॉपी/पेस्ट package.json और एक NPM प्राप्त करने के लिए स्थापित करना मॉड्यूल (या मैन्युअल npm install इन express, path, fs, connect-multiparty)
  4. मुख्य अनुप्रयोग निर्देशिका में uploads निर्देशिका बनाने और इसे लिखने योग्य है सुनिश्चित करें
  5. कॉपी/अतीत कि के रूप में icons शामिल here से public निर्देशिका और index.html अपलोड करने के लिए
  6. 49 या 50 पंक्ति में target मान बदलें।सार्वजनिक निर्देशिका में एचटीएमएल जो आपने अभी आपके सर्वर पते में कॉपी किया है http://localhost:3000/upload
  7. आप index.html में खंड आकार, एक साथ चंक अपलोड आदि की संख्या को ट्विक कर सकते हैं, लेकिन मैंने उन्हें डिफ़ॉल्ट रूप से छोड़ा (वास्तव में, मैं भागों को 3 से 4 में बदल दिया)
  8. उपर्युक्त सभी को पूरा करें, तो आप जाने के लिए अच्छे हैं।
  9. भागो एप्लिकेशन यानी nodemon app.js या नोड अपने सर्वर पते या http://localhost:3000/upload को
  10. नेविगेट app.js और जिन्हें आप नीचे देख आप index.html गाया देखेंगे:

enter image description here

कंसोल लॉग नीचे (अंत नोटिस -। हिस्सा हटाया)

enter image description here

एक अंततः मेरे पास अपलोड निर्देशिका में image2.jpg है।

टी एल; डॉ

आप app.js और index.html फ़ाइल के लिए निम्न में तोड़ मरोड़ की जरूरत को अपलोड करने और Resumable.js के माध्यम से अपलोड की गई फ़ाइल को बचाने के लिए सक्षम होने के लिए।

index.html जहां को resumable एक निर्देशिका भेजने के लिए मेरे मामले में सर्वर यूआरएल को यह इंगित करने के लिए http://localhost:3000/upload

var r = new Resumable({ 
    target:'http://localhost:3000/upload', 
    chunkSize:1*1024*1024, 
    simultaneousUploads:4, 
    testChunks:false, 
    throttleProgressCallbacks:1 
}); 

app.js फेरबदल कर दिया गया है लक्ष्य मान बदलने के लिए बदलाव कर दिया गया है फ़ाइल को सहेजें (सबसे ज्यादा)।

var resumable = require('./resumable-node.js')(__dirname + "/uploads"); 

मैं भी बदलाव किया app.js की app.post('/uploads',...) देख gist सामग्री को बदलने के लिए।

// Handle uploads through Resumable.js 
app.post('/upload', function(req, res){ 
    resumable.post(req, function(status, filename, original_filename, identifier){ 
    if (status === 'done') { 
     var stream = fs.createWriteStream('./uploads/' + filename); 

     //stich the chunks 
     resumable.write(identifier, stream); 
     stream.on('data', function(data){}); 
     stream.on('end', function(){}); 

     //delete chunks 
     resumable.clean(identifier); 
    } 
    res.send(status, { 
     // NOTE: Uncomment this funciton to enable cross-domain request. 
     //'Access-Control-Allow-Origin': '*' 
    }); 
    }); 
}); 

और app.js के अंत में पिछले ट्वीक पिछले मार्ग हैंडलर, निम्न फ़ाइल

s.createReadStream("./resumable.js").pipe(res); 

मैं दूसरों के रूप में ही निर्देशिका में फाइल को resumable.js ले जाया गया पर है, इसलिए मुझे अपने स्थान को बदलने की जरूरत है ताकि रीडस्ट्रीम इसे मिल सके।

संबंधित मुद्दे