4

私はnodejsにまったく慣れていないので、時々問題に遭遇します:)たとえば。AJAX経由で画像ファイルを送信していて、アプリで正常に受信しています。

console.log(req.files)は以下を出力します:

{
    img_1351078491675: {
        size: 354683,
        path: '/tmp/f29009b6dc914c2ab27e2c5fde13e7d8.jpg',
        name: 'nov10wallpaper-1_1600.jpg',
        type: 'image/jpeg',
        hash: false,
        lastModifiedDate: Wed Oct 24 2012 13: 36: 55 GMT + 0200(CEST),
        _writeStream: {
            path: '/tmp/f29009b6dc914c2ab27e2c5fde13e7d8.jpg',
            fd: 14,
            writable: false,
            flags: 'w',
            encoding: 'binary',
            mode: 438,
            bytesWritten: 354683,
            busy: false,
            _queue: [],
            _open: [Function],
            drainable: true
        },
        length: [Getter],
        filename: [Getter],
        mime: [Getter]
    }
}

画像にタイムスタンプがあるため、req.files.img_でアクセスできません。だから私はそれを取得するためにfor(file in reg.files)を使用していました(forEachは機能しませんでした-理由はわかりません。通常のハッシュ/オブジェクトのようです)。しかし今、私の問題は実際に始まります。そのファイルの属性を読み取るにはどうすればよいですか?たとえば、file.pathは機能しません。「未定義」を返しますが、なぜですか?

誰かがそのような基本を理解するためのヒントを教えてもらえますか?

4

2 に答える 2

12

オブジェクトではなく配列を対象としていると思うforEach()ので、おそらくそれが機能しなかったのです。

(これまでに)ファイルが1つしかない場合は、次のようにします。

var fileKey = Object.keys(req.files)[0];
var file = req.files[fileKey];

...あるいは単に:

var file = req.files[Object.keys(req.files)[0]];`

...「1つのレベルを掘り下げる」ので、file.pathまたはを行うことができますfile.type。複数ある(またはある可能性がある)場合:

var files = [];
var fileKeys = Object.keys(req.files);

fileKeys.forEach(function(key) {
    files.push(req.files[key]);
});

これにより、「1レベル下に掘った」ファイルのリストが表示されますforEach()

お役に立てば幸いです。

于 2012-10-25T22:23:55.767 に答える
0

オブジェクトではなく配列を対象としていると思うforEach()ので、おそらくそれが機能しなかったのです。

(これまでに)ファイルが1つしかない場合は、次のようにします。

forEach()は、アップロードが次のような複数のファイルである場合に問題を解決できます。

console.log(files [0] .name);

console.log(files [0] .size);

リクエストファイルをフェッチするループを作成できますi=0>=ファイルの長さ

于 2019-03-27T11:57:22.413 に答える