2016-06-29 5 views
0

私はElectronを使用してアプリケーションを作成しています。私はSocket.IOでサーバーにファイルを送る必要があったので、socket.io-streamモジュールをインストールしました。私はブラウザでテストしましたが、うまくいきます。socket.io-streamによる電子送信ファイルが 'TypeError:無効な非文字列/バッファチャンク'に失敗しました

ss(socket).on('/user/update/profile', (stream, data) => { 
    const filename = path.basename(data.name); 
    const ws = fs.createWriteStream(`userdata/profile/${filename}`); 

    stream.on('error', (e) => { 
     console.log('Error found:'); 
     console.log(e); 
    }); 
    stream.on('drain', (e) => { 
     console.log('drain'); 
    }); 
    stream.on('data',() => { 
     console.log('data'); 
    }); 
    stream.on('close',() => { 
     console.log('close'); 
    }); 
    stream.pipe(ws); 

    //ss(socket).emit('/user/update/profile', {}); 
}); 

そして、これは、クライアント側のコードです:

var file = ev.target.files[0]; 
var stream = ss.createStream(); 

ss(socket).emit('/user/update/profile', stream, { 
    email: this.props.user.email, 
    name: file.name, 
    size: file.size 
}); 

var blobStream = ss.createBlobReadStream(file); 
var size = 0; 
blobStream.on('data', (chunk) => { 
    size += chunk.length; 
    console.log(`${size}/${file.size}`); 
}); 
blobStream.pipe(stream); 

コードはちょうど、非常に簡単ですが、電子で同じことを行う、それは常に

TypeError: Invalid non-string/buffer chunk

これは、サーバー側のコードであると失敗しますNPMのモジュールの紹介ページの例を参考にしてください。私はすでにブラウザとして機能していると言っていました。あなたは、コンソールに進行状況をアップロードするすべてのファイルを記録していることがわかります。 Electronを使用すると、送信ファイルはすべてのデータサイズで記録されるため動作するようですが、サーバー側では失敗します。

NW.jsと同様の問題が見つかりました。その人は自分の方法で問題を解決しましたが、それは私のためには機能しませんでした。

私はどのようにすればよいか非常に感謝しています。

答えて

0

エラーは、文字列が必要な場所以外の文字列(オブジェクトなど)が渡されていることを意味します。私はそれがどこにあるのかはわかりませんが、ブラウザでは動作しているがエレクトロンではないので、基盤となるJavascriptエンジンではこの問題に対して異なる許容差があるかもしれません。ノードデバッガで同じものを実行できますか?ストリームの1つが奇妙に不平を言ったり、壊れたりしますか?これはどのラインから来るのか絞り込むことができますか?

関連する問題