2017-06-13 7 views
0

ファイルを受信して​​フォルダにアップロードするノード+エクスプレスアプリがあります。それにmulterでアップロードされたファイルを移動するときにエラーが発生しました:リソースがビジー状態またはロックされています

が現在の形ですが、私のserver.jsがあります。競合を避けるために、ランダムに生成された名前で、/アップロードディレクトリにすべてのファイルを送信し

var multer = require('multer'); 
app.use(multer({ dest: './uploads/' }).single('files')); 

を。

ランダムに生成された名前のフォルダを作成してファイルを内部に配置するようにすべて修正する必要があります(ファイルにランダムに "asdf"という名前が付けられている場合は、 。uploads/asdf/asdf

ファイルを移動するノードの方法はfs.renameを使用しているので、私は私のアップロードのルートに次のコードが含まれていました。

fs.rename('uploads/' + newFile.uploadname, 'uploads/' + newFile.uploadname + '/' + newFile.uploadname, function(err) { 
    if (err) throw err 
    console.log('Successfully renamed - AKA moved!') 
}) 

(newFile.uploadnameがあるべき、と実際には、名前が生成されムルター)

そのコードが実行されると、私はこの出力を得る:

D:\NodeApp\app\routes\private\upload.js:35                   
     if (err) throw err                        
      ^                         



Error: EBUSY: resource busy or locked, rename 'D:\NodeApp\uploads\b9998bcbb10326c05f305a6a5a0adb9a' -> 'D:\NodeApp\up 
loads\b9998bcbb10326c05f305a6a5a0adb9a\b9998bcbb10326c05f305a6a5a0adb9a'            
    at Error (native)                         

ファイルが正常にアップロードされたが、移動していない、またディレクトリが作成されます。

何が起こっていますか?

+0

あなたは 'uploads/'+ newFile.uploadname'を記録できますか?パスが信頼されていない可能性があります – farhadamjady

+0

@farhadamjady nevermind、私はばかです。詳細については、私が投稿した答えを見てください。 – kace91

答えて

0

問題は、 'asdf'という名前のファイルを 'asdf'という名前のフォルダに移動しようとしていたことです...名前が既に使用されているため、フォルダを作成できません。コピーされるファイル。ファイルを一時的なフォルダに移動してから、フォルダを作成すると問題が解決しました。

関連する問題