2016-11-01 14 views
0

私はユーザーにファイルをアップロードできるようにしています。ファイルをアップロードしたユーザーだけがファイルにアクセスできるようにすることができるかどうかを知りたいと思っています。ノードにファイルをアップロードする

現在、これらを静的フォルダ(パブリック)にアップロードしています。

+1

この質問は非常に広く、実際には「特定のファイルへのアクセスを制限するために認証を実装するにはどうすればよいですか」と尋ねています。私はあなたが既に認証を実装しているかもしれないので、それは悪い質問ではないと言っているのですが、静的ファイルを許可されていないユーザーに送信する措置は、あなたのウェブサイトのセクションを不正なユーザー。 – gelliott181

+0

それには、既存の認証コードと戦略が実装されていますか? – gelliott181

+0

私は広範な認証プロセスを持っています。私は、アプリケーションを使用する前に登録してアカウントを有効にする必要があります。 – user3183411

答えて

0

ファイルをレンダリングするだけです(これはパフォーマンスが低下します) ファイルを次のように保存します。非パブリックフォルダのfilename.extension.userid(例:uploadという名前のディレクトリ)。

ディレクトリのアップロードに要求をキャッチするためにルートを置く:

app.get("/upload/:filename", function(req, res){ 
    var fname = req.params.filename; 
    var userid = req.user.id; // RETRIEVE AUTHENTICATED USER ID 

    var fullname = fname+"."+userid; 
    fs.readFile(__dirname+"/../public/upload/"+fullname, 'base64', function(err, data){ 
     if(err || !data) return res.status(404); 
     res.set('Content-Disposition', 'attachment; filename="'+fname+'"'); 
     res.set('Content-Type', 'application/pdf'); // example for pdf 
     return res.end(data, 'base64'); 
    }); 
}); 
0

私はあなたがアップロードを処理するために別のルートを使用して示唆された理由を見つけることができませんでした。私は同じルートに投稿することができました。私がする必要があったのは、パスを含めてそれに応じて設定することでした。

var folder = newPath = path.join(__dirname, '..', './uploads') 
 
var newPath = folder + '/' + callback.fileName; 
 

 
fs.writeFile(newPath, data, function(err) { 
 

 
    if (err) { 
 
    console.log(err) 
 
    } else { 
 
    //Do stuff 
 
    } 
 
});

は、ファイルがアップロードされた後、私はその後、私のタスクを完了することができました。

+0

この回答は、あなたが求めていたものから比較的遠いようです。このコードはすべて、ファイルを少し異なるディレクトリにアップロードします。あなたの質問が意味することであるファイルの保護は何もしません(「自分のファイルへのアクセスをアップロードしたユーザーにのみ許可する」)。そうすることで、SOコミュニティが私たちに与えられた情報があいまいで情報が不足しているときに役立ちません。 – gelliott181

関連する問題