2

何らかの理由で、ローカルホスト (Windows 7) にファイルを書き込もうとすると、書き込みストリームが開きません。Linux マシンでは、正常に動作します。Windows に追加する必要があるアクセス許可の種類はありますか?

私はすでに管理者として実行しています。

これが現在の方法です。

// Mainfunction to recieve and process the file upload data asynchronously
var uploadFile = function(req, targetdir,callback) {
  var  total_uploaded = 0
      ,total_file;
    // Moves the uploaded file from temp directory to it's destination
    // and calls the callback with the JSON-data that could be returned.
    var moveToDestination = function(sourcefile, targetfile) {
        moveFile(sourcefile, targetfile, function(err) {
            if(!err)
                callback({success: true});
            else
                callback({success: false, error: err});
        });
    };

    // Direct async xhr stream data upload, yeah baby.
    if(req.xhr) {
        var fname = req.header('x-file-name');
        // Be sure you can write to '/tmp/'
        var tmpfile = '/tmp/'+uuid.v1();
        total_file = req.header('content-length');
        // Open a temporary writestream
        var ws = fs.createWriteStream(tmpfile);
        ws.on('error', function(err) {
            console.log("uploadFile() - req.xhr - could not open writestream.");
            callback({success: false, error: "Sorry, could not open writestream."});
        });
        ws.on('close', function(err) {
            moveToDestination(tmpfile, targetdir+fname);
        });


        // Writing filedata into writestream
        req.on('data', function(data,t,s) {
          ws.write(data,'binary',function(r,e){
            total_uploaded = total_uploaded+e;
            var feed = {user:'hitesh',file:fname,progress:(total_uploaded/total_file)*100};
            require('./../../redis').broadCast(JSON.stringify(feed))
          });
        });

        req.on('end', function() {
            ws.end();
        });
    }

    // Old form-based upload
    else {

        moveToDestination(req.files.qqfile.path, targetdir+req.files.qqfile.name);
    }
};
4

2 に答える 2

2

コードは Linux で正常に動作するため、Windows に固有のものである必要があります。

var tmpfile = '/tmp/'+uuid.v1();

あなたの問題かもしれません。Windows のフォルダー/パス構造は異なります。モジュールを使用してみて、pathコードを次のように変更してください

var path = require('path');

var tmpfile = path.join('tmp', uuid.v1());

同じことがおそらくあなたのパラメータにも当てはまりますtargetdir

この関連する質問を参照してください。

于 2012-11-19T10:09:11.993 に答える
1

問題はディレクトリにあります。C:\tmp ディレクトリがない限り (C ドライブからノードを実行していると仮定)、tmp ファイルを書き込む場所がありません。

C:\tmp ディレクトリを作成するか、行を変更することができます

var tmpfile = '/tmp/'+uuid.v1();

のようなものに

var tmpfile = __dirname + '/tmp/'+ uuid.v1();

注: C:\mynodeproject\tmpのようなディレクトリが必要です

于 2012-12-11T22:14:17.103 に答える