7

スキッパーを使用して単純なファイルをアップロードしたい。以前は、フォーム経由でアップロードされたファイルは req.files を使用してアクセスできましたが、デフォルトでスキッパーがインストールされている Sails 0.10.x では req.files が未定義であることを知りました。その代わりに req.file('filename') を使用してファイルにアクセスします。

ドキュメントを見て、簡単なファイルのアップロードを行うことができました。ただし、アップロードする前にファイル名にアクセスできるようにしたいのですが、必要です

  • ファイルをアップロードしたユーザーに基づいて、動的に作成されたディレクトリにファイルをアップロードします
  • 新しく作成されたファイルの名前は、整数の oldFileName + _ + タイムスタンプである必要があります

スキッパーモジュールを使用してこれを行うにはどうすればよいですか、それともこれを行う最も効率的な方法は何ですか?

編集
これまでのところ、これを行うことができましたが、より良い方法があるはずだと思っています。

ファイル名にアクセスするには、この式を使用しました

var inputFileName = req.file('inputFile')._files[0]["stream"]["filename"];

アップロード関数のパラメーターで指定されたファイルパスと名前に基づいて、ディレクトリが存在しない場合、スキッパーが自動的に作成することがわかりました

4

1 に答える 1

11

これは現時点でSkipperの問題です-これには2つのプルリクエストがあります( https://github.com/balderdashy/skipper/issues/12 )-しかし、これがいつマージされて利用可能になるかわかりません。

これにあなたの問題を解決するには:

1. ファイル名を上書きする

// save original file name
var origifile = req.file('testfile')._files[0].stream.filename;
var filename = origifile;

// check if file is existing and change filename if necessary
while(fs.existsSync(".tmp/uploads/" +filename)){
   // Add 4 random chars at he beginning of the filename
   filename = randString(3)+"_"+origifile; 
};

req.file('testfile').upload(filename,function (err, files) {

注意: randString() 関数を記述する必要があります。

2.アップロードしたファイルを自分のフォルダに移動する

アップロード コールバックで:

fs.rename("/tmp/uploads/"+files[0].filename, "your_folder/" +files[0].filename, function(err){
.... });
于 2014-07-06T07:04:31.037 に答える