2013-12-12 6 views
8

मैं अपने नोड/एक्सप्रेस अनुप्रयोग में एक फ़ाइल अपलोड करने का प्रयास कर रहा हूँ, और मैं निम्नलिखित त्रुटि हो रही है:त्रुटि: ENOENT नोड में फ़ाइल का नाम बदलने जब/एक्सप्रेस एप्लिकेशन

{ [Error: ENOENT, rename '/tmp/64124a9886fdb03f1faee159bc533776'] 
    errno: 34, 
    code: 'ENOENT', 
    path: '/tmp/64124a9886fdb03f1faee159bc533776' } 

/home/frankie/Projects/LP/routes/manager/deliverables.js:51 
          throw err; 
           ^
Error: ENOENT, rename '/tmp/64124a9886fdb03f1faee159bc533776' 

यहाँ से प्रासंगिक कोड है मेरी एप्लिकेशन:

if (req.files.file.name !== '' && req.files.file.size !== 0) { 
    // this will move the uploaded file from the tmp folder to the uploads folder 
    fs.rename(req.files.file.path, app.get('loc') + "uploads/" + name + "-" + id + "/" + req.files.file.name, function (err) { 
     if (err) throw err; 

जब मैं जाँच क्या है/फ़ाइल tmp में है:

[email protected]:/tmp$ ll 
total 56 
drwxrwxrwt 12 root root 4096 Dec 12 11:33 ./ 
drwxr-xr-x 23 root root 4096 Sep 27 22:54 ../ 
-rw-rw-r-- 1 fiega fiega 903 Dec 12 11:33 13a26570f87297fd7f61785ef7d8772b 

इस तरह मैं शरीर पार्सर का उपयोग कर रहा:

app.use(express.cookieParser()); 
app.use(express.bodyParser()); 
app.use(express.methodOverride()); 

कोई विचार? मैंने अपने पूरे ऐप की अनुमतियों को बदलने की कोशिश की है लेकिन कोई पासा नहीं है।

उत्तर

13

क्या आपने गंतव्य पथ का उपयोग किया है जिसका आप उपयोग कर रहे हैं? (शायद आप app.get('loc') + "/uploads/" ...)

विचित्र रूप से जब ऐसा होता है (स्रोत फ़ाइल मौजूद है और गंतव्य निर्देशिका नहीं है), त्रुटि संदेश आपको केवल स्रोत फ़ाइल को इंगित करता है ... तो जांचें कि यह समस्या नहीं है या नहीं।

याद रखें कि क्या आप अपलोड की गई फ़ाइल को /a/b/c.txt पर ले जाना चाहते हैं, /a और /a/b दोनों पहले से मौजूद होना चाहिए।

इसके अलावा, अगर आपको फ़ाइल को किसी भिन्न विभाजन में स्थानांतरित करने की आवश्यकता है तो आपको this जैसे कुछ का उपयोग करना होगा, या आपको EXDEV त्रुटि मिलेगी।

1

शायद मूल पोस्टर की मदद नहीं करेगा, लेकिन अगर कोई अन्य इस मुद्दे पर चलता है और पाया जाता है कि स्रोत और गंतव्य दोनों मौजूद हैं, तो यह त्रुटि अभी भी इस त्रुटि में चल रही है, उम्मीद है कि इससे मदद मिलेगी। जब मैं इस मुद्दे में भाग गया तो यह सही समस्या है जो मैंने पाया - जब मैंने चेक किया, स्रोत (फ़ाइल का पूरा पथ) और गंतव्य (निर्देशिका) दोनों मौजूद थे, फिर भी नाम ईनोन्ट फेंक रहा था।

मेरे मामले में समाधान यह पहचानना था कि मैं गंतव्य निर्देशिका बनाने के लिए निर्देशिका निर्माण फ़ंक्शन के एसिंक्रोनस संस्करण का उपयोग कर रहा था। नतीजतन, उस समय नाम बदलने का प्रयास गंतव्य निर्देशिका अभी तक अस्तित्व में नहीं था, लेकिन जैसे ही मैंने जांच की थी, यह पूरा हो गया था और निर्देशिका वहां थी। निर्देशिका निर्माण के सिंक्रोनस संस्करण पर स्विच करने से समस्या ठीक हो गई।

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