これを読んでいるのであれば、Manuel Kiessling の Node チュートリアルに従っていることでしょう。チュートリアルのファイル アップロードの部分を完了すると、次のエラーが表示されました。
fs.rename(files.upload.path, "img/img.jpg", function(error) {
^
TypeError: Cannot read property 'path' of undefined
これを読んでいるのであれば、Manuel Kiessling の Node チュートリアルに従っていることでしょう。チュートリアルのファイル アップロードの部分を完了すると、次のエラーが表示されました。
fs.rename(files.upload.path, "img/img.jpg", function(error) {
^
TypeError: Cannot read property 'path' of undefined
まず、チュートリアルがリクエストとレスポンスを間違った順序で渡しているのは事実です。最初にしたことは、順序を から(response, request)
に変更したこと(request, response)
です。(どこでもこれを行うようにしてください)。この理由は、の関数がこの順序でそれらを渡すと確信しているからonRequest
です。HTTP
createServer()
それをしたら、まだ同じエラーが発生しました。しかし、私のフォームからの情報をログに記録することによって
...
var form = new formidable.IncomingForm();
console.log("About to parse...");
form.parse(request, function(error, fields, files) {
console.log("Parsing done.");
console.dir(request.headers);
console.log(fields);
console.log(files);
...
fields
キーに探していたものが含まれていて、files
キーが空であることに気付きました。
{ upload: '2015-03-08 14.54.06.jpg', 'Upload File': 'Submit' }
{}
ここから、 を使用できることは明らかですfields.upload
。これを使用すると、それが文字列ではないという別のエラーが返されました(または、少なくとも手ごわい人が受け入れるものではありませんでした)。toString()
どちらもうまくいかないようだったので、別の変換を使用しました:
fs.rename(fields.upload + "", "img/img.jpg", function(error) {
...
}
これは理想的ではありませんが、うまくいきました。
これは と で行われましnode@0.10.35
たformidable@1.0.17
。私の解決策がすべての人に役立つかどうかはわかりませんが、うまくいけば、正しい方向に向けることができます. この不一致は、チュートリアルで古いバージョンの node と formidable を使用したことが原因である可能性があります。
fs.rename が使用しようとしていた入力フィールドの名前が異なっていたため、同じエラーが発生しました。
基本的に、この行の名前を確認してください。
'<input type="file" name="UPLOADEDIMAGE">'+
次の 2 行と同じです。
fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png", function(err) {
fs.rename(files.UPLOADEDIMAGE.path, "/tmp/test.png");