[nodejs_jp:851] 画像のアップロードについて

2013-04-09 スレッド表示 daaishi
はじめまして。
石田と申します。

現在、チャット機能に画像を投稿できる機能を追加しようと考えています。
そこで、クライアント側のformから画像を選択し、XHRでデータをサーバーにPOSTし、サーバーでパスを変更して、フォルダに保存し、それをhtmlで表示する機能を実装しました。

これをherokuで利用したいので、画像データをAmazon 
S3に保存し、それを取り出してhtmlで表示したいのですが、サーバーで受け取ったデータをどのようにしてAmazon S3に保存すれば良いかわかりません。

知識が足りなく、説明不足の点があるかと思いますが、
アドバイス頂けないでしょうか?
宜しくお願い致します。

-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




Re: [nodejs_jp:852] 画像のアップロードについて

2013-04-09 スレッド表示 EBIHARA, Yuichiro
はじめまして、海老原と申します。

ちょうどいま同じようなことをやっています。
以下のサイトが参考になりました。

Expressでファイルをアップロード
http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

Node.jsからAmazon S3にアップロード
http://aws.typepad.com/aws_japan/2012/12/aws-sdk-for-nodejs-now-available-in-preview-form.html
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3/Client.html#putObject-property

だいたい以下の様な手順でうまくいっています。

1.いったんファイルシステムに保存
2.それをfs.readFileで読み込み、S3にアップロード
3.1のファイルをfs.unlinkで削除

あと、私の場合はアップロードされたファイルのリサイズ、サムネイル作成もやっていますが、以下のリストが役に立ちました。
リサイズとS3へのアップロードをいっぺんにやってくれるようなものもあります。
(私はEasyImageを選びましたが)

https://github.com/joyent/node/wiki/modules#wiki-graphics

以上、お役に立てば幸いです。

--
海老原 雄一郎 / EBIHARA, Yuichiro
 Email: e...@mercury.ne.jp
 Twitter: @yebihara



2013年4月9日 17:15 daaishi sho1i...@gmail.com:

 はじめまして。
 石田と申します。

 現在、チャット機能に画像を投稿できる機能を追加しようと考えています。

 そこで、クライアント側のformから画像を選択し、XHRでデータをサーバーにPOSTし、サーバーでパスを変更して、フォルダに保存し、それをhtmlで表示する機能を実装しました。

 これをherokuで利用したいので、画像データをAmazon
 S3に保存し、それを取り出してhtmlで表示したいのですが、サーバーで受け取ったデータをどのようにしてAmazon S3に保存すれば良いかわかりません。

 知識が足りなく、説明不足の点があるかと思いますが、
 アドバイス頂けないでしょうか?
 宜しくお願い致します。

 --

 ---
 このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
 このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.comにメールを送信します。
 その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




Re: [nodejs_jp:854] 画像のアップロードについて

2013-04-09 スレッド表示 daaishi
ご連絡ありがとうございます。
はじめまして、宜しくお願いします。

1.いったんファイルシステムに保存

herokuでは読み出しだけという記事を見つけ、実際に画像を保存できませんでした。
ファイルシステムに保存というのはまた別の方法があるのでしょうか?

お手数ですが、宜しくお願いします。

石田
twitter: @sho1i4da

2013年4月9日火曜日 20時27分11秒 UTC+9 Ebihara Yuichiro:

 はじめまして、海老原と申します。

 ちょうどいま同じようなことをやっています。
 以下のサイトが参考になりました。

 Expressでファイルをアップロード
 http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

 Node.jsからAmazon S3にアップロード

 http://aws.typepad.com/aws_japan/2012/12/aws-sdk-for-nodejs-now-available-in-preview-form.html

 http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3/Client.html#putObject-property

 だいたい以下の様な手順でうまくいっています。

 1.いったんファイルシステムに保存
 2.それをfs.readFileで読み込み、S3にアップロード
 3.1のファイルをfs.unlinkで削除

 あと、私の場合はアップロードされたファイルのリサイズ、サムネイル作成もやっていますが、以下のリストが役に立ちました。
 リサイズとS3へのアップロードをいっぺんにやってくれるようなものもあります。
 (私はEasyImageを選びましたが)

 https://github.com/joyent/node/wiki/modules#wiki-graphics

 以上、お役に立てば幸いです。

 --
 海老原 雄一郎 / EBIHARA, Yuichiro
  Email: e...@mercury.ne.jp javascript:
  Twitter: @yebihara



 2013年4月9日 17:15 daaishi sho1...@gmail.com javascript::

 はじめまして。
 石田と申します。

 現在、チャット機能に画像を投稿できる機能を追加しようと考えています。

 そこで、クライアント側のformから画像を選択し、XHRでデータをサーバーにPOSTし、サーバーでパスを変更して、フォルダに保存し、それをhtmlで表示する機能を実装しました。

 これをherokuで利用したいので、画像データをAmazon 
 S3に保存し、それを取り出してhtmlで表示したいのですが、サーバーで受け取ったデータをどのようにしてAmazon S3に保存すれば良いかわかりません。

 知識が足りなく、説明不足の点があるかと思いますが、
 アドバイス頂けないでしょうか?
 宜しくお願い致します。

 -- 
  
 --- 
 このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
 このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.comjavascript:にメールを送信します。
 その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。
  
  




-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




Re: [nodejs_jp:854] 画像のアップロードについて

2013-04-09 スレッド表示 Kazuyuki Honda
石田さん

本多@hakobera です。

なんとなくネタとして面白そうだったの、
express 3.1 + AWS公式SDK for Node.jsで実装してみました。
Heroku でも Node.js 0.10.3 が動いています。

https://bitbucket.org/hakobera/s3-image-upload-nodejs-on-heroku/src

4/11まで期間限定のLiveデモはこちら
※ 1MBまでのファイルしかあげられないようにしてあります
※ ファイルは適当なタイミングで消していきます

http://desolate-spire-5513.herokuapp.com/

 herokuでは読み出しだけという記事を見つけ、
 実際に画像を保存できませんでした。ファイルシステムに保存というのはまた別の方法があるのでしょうか?

今回のサンプルだと、express が処理を隠蔽してしまっていますが、
Heroku はファイルを保存できない(=再起動すると消えてしまう)だけで、このように /tmp 以下にはファイルを書き込むことが可能です。

上記リポジトリの routes/upload.js の19行目の下に console.log を追加してみると、実際のファイルのパスが見えます。

  var uploadFile = req.files.upload;
  if (!uploadFile) {
return res.send('No file is uploaded!');
  }
  console.log(uploadFile); // = 追加

出力結果

{
  domain: null,
  _events: {},
  size: 115013,
  path: '/tmp/4ad3d88c6a6fb7e6a6fa7ae6fb7884b1.png',
  type: 'image/png',
...
}

というわけで、expresss(実際の処理は formidable
https://github.com/felixge/node-formidableがやっています)
 を使う場合は特に意識する必要もないですし、
自分でファイルを保存したい場合は、/tmp 以下にファイルを書きだして、同様の処理をすれば良いです。

今回はサンプルですのでそのままファイルを保存していますが、
画像は海老原さんの言うとおり、なんらかの画像処理ライブラリ(ImageMagick のラッパーなら Heroku で動きます)で、
本当に画像なのかのチェック、サムネイル作成、リサイズなどを組み込んだ方が良いと思います。

以上、なにか参考になれば。

P.S 今回、海老原さんの所で紹介されているAWSの公式SDKを使ってみましたが、最初 Promise スタイルだったのが、いつのまにか
Node.js 標準API準拠の
コールバックスタイルに変わっていて、使いやすくなってきたなと思いました。


2013年4月9日 20:44 daaishi sho1i...@gmail.com:

 ご連絡ありがとうございます。
 はじめまして、宜しくお願いします。

 1.いったんファイルシステムに保存

 herokuでは読み出しだけという記事を見つけ、実際に画像を保存できませんでした。
 ファイルシステムに保存というのはまた別の方法があるのでしょうか?

 お手数ですが、宜しくお願いします。

 石田
 twitter: @sho1i4da

 2013年4月9日火曜日 20時27分11秒 UTC+9 Ebihara Yuichiro:

 はじめまして、海老原と申します。

 ちょうどいま同じようなことをやっています。
 以下のサイトが参考になりました。

 Expressでファイルをアップロード
 http://www.hacksparrow.com/**handle-file-uploads-in-**
 express-node-js.htmlhttp://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

 Node.jsからAmazon S3にアップロード
 http://aws.typepad.com/aws_**japan/2012/12/aws-sdk-for-**
 nodejs-now-available-in-**preview-form.htmlhttp://aws.typepad.com/aws_japan/2012/12/aws-sdk-for-nodejs-now-available-in-preview-form.html
 http://docs.aws.amazon.com/**AWSJavaScriptSDK/latest/AWS/**
 S3/Client.html#putObject-**propertyhttp://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3/Client.html#putObject-property

 だいたい以下の様な手順でうまくいっています。

 1.いったんファイルシステムに保存
 2.それをfs.readFileで読み込み、**S3にアップロード
 3.1のファイルをfs.unlinkで削除

 あと、私の場合はアップロードされたファイルのリサイズ、**サムネイル作成もやっていますが、**以下のリストが役に立ちました。
 リサイズとS3へのアップロードをいっぺんにやってくれるような**ものもあります。
 (私はEasyImageを選びましたが)

 https://github.com/joyent/**node/wiki/modules#wiki-**graphicshttps://github.com/joyent/node/wiki/modules#wiki-graphics

 以上、お役に立てば幸いです。

 --
 海老原 雄一郎 / EBIHARA, Yuichiro
  Email: e...@mercury.ne.jp
  Twitter: @yebihara



 2013年4月9日 17:15 daaishi sho1...@gmail.com:

 はじめまして。
 石田と申します。

 現在、**チャット機能に画像を投稿できる機能を追加しようと考えています**。
 そこで、クライアント側のformから画像を選択し、**XHRでデータをサーバーにPOSTし、**サーバーでパスを変更して、フォルダに保存し、**
 それをhtmlで表示する機能を実装しました。

 これをherokuで利用したいので、画像データをAmazon 
 S3に保存し、それを取り出してhtmlで表示したいのですが、**サーバーで受け取ったデータをどのようにしてAmazon
 S3に保存すれば良いかわかりません。

 知識が足りなく、説明不足の点があるかと思いますが、
 アドバイス頂けないでしょうか?
 宜しくお願い致します。

 --

 ---
 このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
 このグループから退会し、メールの受信を停止するには、node**js_jp+unsubscribe@**googlegroups.comにメールを送信します。
 その他のオプションについては、https://groups.**google.com/groups/opt_outhttps://groups.google.com/groups/opt_outにアクセスしてください。




  --

 ---
 このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
 このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.comにメールを送信します。
 その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




Re: [nodejs_jp:856] node.jsとネイティブアプリで通信を行う方法について

2013-04-09 スレッド表示 竹内佑介
質問者の竹内です。

printf(%s\n, asctime(date)); 
の後に 
fflush(stdout); 大津さん

ありがとうございます、この方法で目的が達成できました。

今回のケースから既存アプリにWebブラウザへのログ出力機能を追加する場合には、
パイプ処理だけではなく既存アプリにもてを入れる必要があることが分かりました。

現在手を入れようとしているアプリは、コンソールメッセージ表示系関数がラップされているので、
そこに手を入れるだけで対応ができそうです。

ただ、既存アプリに手を入れないで、Webブラウザへのログ出力機能が実現できたら、
結構色々な用途で使えて便利だなと思いました。
この手の問題は環境に依存する部分が強そうなので答えが一つに定まらないと思いますが、
何かよい方法があれば教えて頂けないでしょうか。


2013年4月9日火曜日 19時45分32秒 UTC+9 tommie:

 tommieです。 

 (2013/04/09 9:10), Shigeki Ohtsu wrote: 
  大津です。 
  
  
  worker 内で thread local でない async.data をロックせずに操作しています 
  が、本当に大丈夫なんでしょうか? 

 キュー経由でメッセージ送信するようにしました。 

  検証しました。 
  
  https://gist.github.com/shigeki/5341670 
  
  worker 内の sleep(1) を外して、固定回ループにしてます。 
  どうでしょうか? 

 お手間取らせて申し訳ないです。 

 forkして変更しました。 

 https://gist.github.com/open-tommie/5342559 

 変更点、ログの解説などをreadme.txtに書きました。 
 以下、readme.txtから。 

 ●main.c変更点 

 ・ワーカー関数をひとつにしました。 
 fake_download1(), after1()を削除。 

 ・fake_download0()内で使用していたmsgは 
 スタック変数であり、スレッドセーフではないので 
 malloc()で取得したヒープ上メモリ領域を使うように変更しました。(main.c 
 48行目) 
 使用済みメモリ領域はprint_progress()内でfree()しています。(main.c 33行目) 

 ・uv_async_send()を実行してからprint_progress()が呼ばれる間に 
 複数回uv_async_send()が呼ばれても、print_progress()の実行は1回だけ 
 です(uv_async_send()の仕様)。 
 この場合、全てのmsgが処理されるわけではない、ということになります。 
 これを防ぐ為に、async.dataでmsgを送信するのをやめて、 
 代わりにmsg用のキューg_msgQueueを使いました。(main.c 26〜28, 53行目) 
 uv_async_send()はprint_progress()呼び出しタイミングを通知するだけにな 
 りました。 

 ・STLのqueueはスレッドセーフではないので、queue操作の前後に 
 uv_mutex_lock(), uv_mutex_unlock()を加えて、 
 スレッドセーフにしています。 



 ご意見募集です。 

  Node.js初期化関数って何を指して仰ってるのかわかりませんが、 
  仮に node::Start() を指すとしたら uv_run() でブロックしちゃいますけど… 

 C++部分も、Node.js同様にイベント駆動でプログラムを書きます。 
 libuvを用いたC++プログラム同様、 
 node::Start()のuv_run()のイベント処理でC++関数が呼ばれるようにします。 
 そうれば、Node.jsとC++が混在できますよね。 
 もちろん、アドオンのように、C++ ⇔ Node.jsの型変換や 
 Node.js関数としての登録などは必要になります。 

 以上。 



-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




Re: [nodejs_jp:856] node.jsとネイティブアプリで通信を行う方法について

2013-04-09 スレッド表示 Shigeki Ohtsu
大津です。

 ご意見募集です。

まだ worker 内の sleep(1) に依存した実装になってますよね。
(sleep(1) を外すと uv_async_send() が正常に動作しなくなる)

これ、 sleep(1) を入れないと、イベントループが io poll で call back を処
理する前に各スレッドが async fd を上書きしちゃうからだと思います。(ちゃ
んと調べてないですが)

先に述べたよう uv_check() を使った実装だとこんな感じになります。
(これは worker 内に sleep(1) は必要ないです)

https://gist.github.com/shigeki/5351299

あと pthread_self() の替りに uv_thread_self() も使えるのでこっちを使って
ます。

まぁ、こんなことのオンパレードになるし、あのころは libuv の pthread 対応
も実装されてないので、 Node の Isolate 対応が複雑で取り止めになったとい
うことはホント理解できますな。

-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




[nodejs_jp:859] Re: socket.ioが動きません

2013-04-09 スレッド表示 遠州律夫


2013年4月10日水曜日 12時46分11秒 UTC+9 遠州律夫:



 2013年4月8日月曜日 20時55分24秒 UTC+9 遠州律夫:

 サーバーでsocket.ioを動かすと、
 warn - websocket connection invalid
 と出ます。なぜでしょうか。

  
 Nodeは、0.8.18で、
 Socket.IOは、最新版です。
 ブラウザーは、Google Chromeの最新版で、
 なぜかポート80で動かすと、エラーが出て、
 1337に変えたら動きました。
 エラーは、ブラウザでconnect_failedが出で、
 websocketで通信しようとして、
 xhr-polling
 jsonp-pollingの順番で、接続しようとしてます。
 なぜでしょうか。

  

忘れてましたが、githubにコードがありますので、それも一緒に見てください。
https://github.com/3-14P/3.14P_CHAT 

-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。




Re: [nodejs_jp:859] node.jsとネイティブアプリで通信を行う方法について

2013-04-09 スレッド表示 Shigeki Ohtsu
大津です。

 ありがとうございます、この方法で目的が達成できました。

良かったです。

 ただ、既存アプリに手を入れないで、Webブラウザへのログ出力機能が実現でき 
 たら、
 結構色々な用途で使えて便利だなと思いました。
 この手の問題は環境に依存する部分が強そうなので答えが一つに定まらないと思 
 いますが、
 何かよい方法があれば教えて頂けないでしょうか。

うー、「既存の任意のアプリの(どんなのかわからない)出力を、このアプリに
一切手を加えず別のアプリの入力に渡す何か良い方法はないか?」という一般的
な質問になりますよね。ホント環境依存です。

せめてファイル出力に限定されるんなら fs.watch() を使うぐらいですが、
独自画面に出されちゃうようなものなら、スクリーンショットとってCAPTCHA解
読するしかないんじゃないですかねぇ。(もうNodeの話じゃなくなちゃう)




-- 

--- 
このメールは Google グループのグループ「Node.js 日本ユーザグループ」の登録者に送られています。
このグループから退会し、メールの受信を停止するには、nodejs_jp+unsubscr...@googlegroups.com にメールを送信します。
その他のオプションについては、https://groups.google.com/groups/opt_out にアクセスしてください。