完了しようとしているプロジェクトがあります。画像をアップロードしたいです。画像をアップロードできますが、アップロードするディレクトリにはアップロードできません。
よし、コーディングしましょう:
app.post('/register',function(req,res)
{
var form = new formidable.IncomingForm();
form.keepExtensions = true;
form.uploadDir ='./uploaded/';
form
.on('error', function(err) {
throw err;
})
.on('field', function(field, value) {
//receive form fields here
})
/* this is where the renaming happens */
.on ('fileBegin', function(name, file){
//rename the incoming file to the file's name
file.path = form.uploadDir + "/" + file.name;
})
.on('file', function(field, file) {
//On file received
})
.on('progress', function(bytesReceived, bytesExpected) {
//self.emit('progess', bytesReceived, bytesExpected)
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
})
.on('end', function() {
});
form.parse(req);
問題は、画像を投稿すると...画像がまだprocess.env.TMPに保存されていることです。私のプロジェクトにはこのdir arqがあります
proyect:
node_modules
uploaded
public
routes
views
app.js
package.json
編集2:問題はBODYPARSERです
最後のコードからわかりました...問題は、アプリにbodyParserがあるように構成したときのapp.jsでした。
誰かがコードを使用したい場合は、最後のコードは機能的に正しく機能しています... Express.configure の行にコメントするだけです
app.use(express.bodyParser());
エクスプレスボディパーサーをオフにしますが、エクスプレスの使用も手ごわいので、同じことです...
別の問題があります
私はこのようにexpress.bodyParserを設定します
app.use(express.bodyParser(
{
uploadDir: './uploads',
keepExtensions: true
}));
私はこのように最初のコードを変更します
app.post('/register',function(req,res)
{
var oldDir=req.files.img.path;
var newDir='./uploads/'+req.body.email+'/perfil/';
if(req.files)
{
mkdirp(newDir,0777,function(err){
if(err) throw err;
})
}
if(req.files)
{
fs.rename(oldDir,newDir+req.files.img.name,function(err){
if(err) throw err;
});
}
res.send('pow!');
それは機能的であり、このコードがファイルを受信すると、ファイルをアップロードフォルダーに入れ、次に電子メールの名前でフォルダーを作成し、最後にファイルを電子メールフォルダーに移動し、元のファイルのように拡張子を付けて名前を変更します
パーフェクトだ"!
いや、完璧なんてない… この方法を使いたい
.on ('fileBegin', function(name, file){
//rename the incoming file to the file's name
file.path = form.uploadDir + "/" + file.name;
})
.on('progress', function(bytesReceived, bytesExpected) {
//self.emit('progess', bytesReceived, bytesExpected)
var percent = (bytesReceived / bytesExpected * 100) | 0;
process.stdout.write('Uploading: %' + percent + '\r');
})
最初のコードから、サーバーがファイルを受信した後にファイルを移動する 2 番目のコードで最初からファイルを配置する場所を構成できるためです。
Express はミドルウェアのように手ごわいので、方法は Express だと思います。
メソッドを設定するにはどうすればよいですか??
メソッドはどこにありますか...?'?
2 番目のコードから req.files に含まれるメソッドを知るにはどうすればよいですか?? (bodyParser() を使用する req.files は、最初のコードで formidable を使用する form.file と同じであるため)
tnx すべて