2017-09-06 15 views
0

expressを使ってファイル転送ツールを作成すると、ほとんどすべての作業が完了しました。単にファイルに書き込まれた要求からデータを取得する方法を理解する必要があります。ExpressJSの投稿要求からファイルを書き込む

私の問題は、ファイルの内容が要求オブジェクトにどこに置かれているのかわからないことから発生しているようです。

let file = watcher.getOneFile(config.thisLocation); 
console.dir(file); 
let contents = fs.readFileSync(file.fullPath, 'utf-8'); 
console.log(contents); 
let form = { 
    attachments: [ 
    contents 
    ] 
} 
rq.post({ 
    url: `http://${homeAddress}:${port}/files/?loc=${config.thisLocation}&file=${file.fileName}`, 
    headers: {'content-type':'application/x-www-form-urlencoded'}, 
    formData: form 
}, (err, res, body) => { 
    // body = JSON.parse(body); 
    console.log(body); 
}); 

要求を送信し、私は、サーバー上の要求を得るとき、私は、ファイルの内容が実際にどこか分からないを処理する

私のコード。リクエストリクエストオブジェクト上のファイルの内容である

app.post('/files', (req, res) => { 
    console.log(req.query.loc); 
    // console.dir(req); 
    let incoming = watcher.getOutputPath(req.query.loc, config.locations); 
    console.log(incoming); 
    console.dir(req.body); 
    // console.log(req.body); 
    // let body = JSON.parse(req.body); 
    console.log(req.query); 
    let filename = path.join(incoming, req.query.file); 
    console.log(filename); 
    fs.writeFile(filename, req.body, (err) => { 
    if(err){ 
     console.error(err); 
    } 
    console.log(`Successfully wrote file: ${path.join(incoming, req.query.file)}`); 
    }); 
    res.sendStatus(200); 
}); 

を処理するための

コード?

+0

あなたは、彼らがしている、 'req.file'または' req.files' – turmuka

+0

を試してみました未定義。 –

答えて

1

残念ながら、ファイルコンテンツには簡単にアクセスすることはできません。フォームデータ要求を解析するには、busboyまたは類似のパッケージを使用することをお勧めします。ここで

あなたがbusboyを使用してファイルの内容を読み込み、ファイルシステムに書き込むことができる方法である:それらをログに記録する際に

const Busboy = require('busboy'); 

app.post('/files', (req, res) => { 
    const busboy = new Busboy({ headers: req.headers }); 

    busboy.on('file', (fieldname, file, filename, encoding, mime) => { 
    const newFilename = `${Date.now()}_${filename}`, 
     newFile = fs.createWriteStream(newFilename); 

    file.pipe(newFile); 

    file.on('end',() => { 
     console.log(`Finished reading ${filename}`); 
    }); 
    }); 

    busboy.on('finish',() => { 
    console.log('Finished parsing form'); 

    res.sendStatus(200); 
    }); 

    req.pipe(busboy); 
}); 
+0

ありがとうございます。私はこれを試してみる。あなたの答えを更新してくれてありがとう。 –

+0

ようこそ。あなたがこれに何か問題がある場合は投稿してください。 – poohitan

+1

ちょうどPostManでテストされ、動作します!今私の他のコードでテストする! –

関連する問題