2008年04月10日

ファイルダウンロード処理(Java)

Javaでファイルダウンロードを行います。


import java.io.File;
import java.io.IOException;
import java.io.FileInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedInputStream;
import java.net.HttpURLConnection;
import java.net.SocketException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadFile extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse res)
throws ServletException, IOException {

File file = new File("c:\\sample.pdf");
BufferedInputStream in = null;
BufferedOutputStream out = null;
try {
//HTTPヘッダの出力
res.setContentType("application/octet-stream");
res.setHeader("Content-disposition", "attachment; filename=\"" + file.getName() + "\"");
res.setContentLength((int)file.length());
res.setHeader("Expires", "0");
res.setHeader("Cache-Control", "must-revalidate, post-check=0,pre-check=0");
res.setHeader("Pragma", "private");

in = new BufferedInputStream(new FileInputStream(file));
out = new BufferedOutputStream(res.getOutputStream());

byte buf[]=new byte[1024];
int len;
while((len=in.read(buf))!=-1){
out.write(buf,0,len);
}
} catch (SocketException e) {
//●ダウンロード処理中にダウンロードダイアログの「キャンセル」が
//クリックされた場合の例外。
//●ただし、ダウンロードダイアログが表示されているバックグラウンドで
//ブラウザへのダウンロードが行われていることに留意すること。
//●つまり小さいファイルでは、ダイアログが表示される時には、ダウンロード
//処理は完了し、サーブレットは終了してしまっており、SocketExceptionの
//も発生しないということです。
} catch (Exception e) {
//ファイルダウンロード用のHTTPヘッダをリセットします。
res.reset();
res.sendError(HttpURLConnection.HTTP_INTERNAL_ERROR , e.toString());
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.flush();
out.close();
}
}
return;
}
}


posted by 台北猫々 at 08:00| Comment(0) | TrackBack(0) | 技術メモ(Java)

2008年04月09日

Eclipse DE 文字エンコーディングを変換

Eclipseで開発していて、個別もしくは一括で文字エンコーディングを変換したいときが、たまにあるのですが、標準機能にはないので、別途変換ツールでちまちまと変換したのですが。。。

ありました! 文字(コード)エンコーディング変換プラグイン。↓の会社で開発して配布してくれていました。
「株式会社パワービーンズ」
http://www.powerbeans.co.jp/
のEclipse プラグイン CharsetConv v1.00 リリース (2006-10-2)
です。

ファイル単位でもフォルダ単位でも、変換可能です。
ナイスプラグインです。猫


良かったらクリックお願いします→banner_01.gif

posted by 台北猫々 at 20:46| Comment(0) | TrackBack(0) | 日記

2008年04月08日

Ruby DE MySQL For WindowsXP

Rubyでデータベースのデータ移行ツールを作ろうと思いまして、MySQLの操作方法を調べたのですが、なかなか散文的なものが多いですね。なのでメモしておきます。

環境:
WindowsXP SP2
XAMPP 1.6.6a (MySQL 5.0.51)
Ruby 1.8.6

新規にインストールするもの
・Ruby/DBI
・MySQL/Ruby

「Ruby/DBI」はデータベースを透過的に扱うための抽象化層で、「MySQL/Ruby」は、各データベースが提供するのアクセスAPIを呼び出すドライバ層になります。

実際には、「MySQL/Ruby」だけでも操作は可能だそうですが、折角抽象化モジュールが提供されているので、「Ruby/DBI」も使用することにしました。

手順は以下のようになります。
(1)Ruby/DBIのインストール
(2)MySQL/Rubyのインストール
(3)libmysql.dllの場所をPATHに通す。

以下、詳細
============================
(1)Ruby/DBIのインストール
http://rubyforge.org/projects/ruby-dbi/からRuby/DBIのモジュールをダウンロードして適当なフォルダに展開(↓ではCドライブ直下に展開)して、DOSプロンプトから↓のようにコマンド
を実行して、インストールします。

C:\dbi-0.2.0>ruby setup.rb config --with=dbi,dbd_mysql
entering config phase...
config done.

C:\dbi-0.2.0>ruby setup.rb setup
entering setup phase...
setting #! line to "#!c:/usr/local/ruby/bin/ruby"
setup.rb: skip bin/proxyserver(dbd_proxy) by user option
setup.rb: skip ext/dbd_sybase(dbd_sybase) by user option
setup done.

C:\dbi-0.2.0>ruby setup.rb install
entering install phase...
mkdir -p c:/usr/local/ruby/bin
install sqlsh.rb c:/usr/local/ruby/bin
setup.rb: skip bin/proxyserver(dbd_proxy) by user option
mkdir -p c:/usr/local/ruby/lib/ruby/site_ruby/1.8/DBD/Mysql
install Mysql.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/DBD/Mysql/Mysql.rb
mkdir -p c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install columninfo.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install row.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install sql.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install trace.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install utils.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install version.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi
install dbi.rb c:/usr/local/ruby/lib/ruby/site_ruby/1.8
setup.rb: skip ext/dbd_sybase(dbd_sybase) by user option
install done.

(2)MySQL/Rubyのインストール(RubyGemsで行います)
C:\>gem install mysql
Bulk updating Gem source index for: http://gems.rubyforge.org
Select which gem to install for your platform (i386-mswin32)
1. mysql 2.7.3 (mswin32)
2. mysql 2.7.1 (mswin32)
3. mysql 2.7 (ruby)
4. mysql 2.6 (ruby)
5. Skip this gem
6. Cancel installation
> 1
Successfully installed mysql-2.7.3-mswin32
Installing ri documentation for mysql-2.7.3-mswin32...
Installing RDoc documentation for mysql-2.7.3-mswin32...
While generating documentation for mysql-2.7.3-mswin32
... MESSAGE: Unhandled special: Special: type=17, text=""
... RDOC args: --op c:/usr/local/ruby/lib/ruby/gems/1.8/doc/mysql-2.7.3-mswin32/
rdoc --exclude ext --main README --quiet ext README docs/README.html
(continuing with the rest of the installation)

(3)libmysql.dllの場所をPATHに通す。
XAMPPをデフォルトインストールしていると、「C:\xampp\mysql\bin」にlibmysql.dllはあるので、環境変数PATHに「C:\xampp\mysql\bin」を追加します。

セットアップ完了!!
=============================

DBIの使用方法は↓のサイトなどが参照になるかと思います。

「Ruby DBI モジュールを使う」
http://www.jiubao.org/ruby-dbi/ruby-dbi.html#TOC_16

#一応サンプル的なものは↓
require 'dbi'

dbh = DBI.connect('DBI:Mysql:test', 'user', 'password')

sth = dbh.prepare('select * from simple')
sth.execute

while row=sth.fetch do
p row
end

sth.finish

dbh.disconnect


※ちなみに、
libmysql.dllがPATHに無い場合のエラー
c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi.rb:368:in `load_driver': Could not load driver (no such file to load -- c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbd/Mysql) (DBI::InterfaceError)
from c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi.rb:233:in `_get_full_driver'
from c:/usr/local/ruby/lib/ruby/site_ruby/1.8/dbi.rb:219:in `connect'
from mysql_test.rb:4


良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 20:58| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2008年04月07日

あまり使わないツッコミシリーズ3

「そうはいっても、アブソリュートゼロほどではないでしょ」
posted by 台北猫々 at 20:55| Comment(0) | TrackBack(0) | 日記

2008年04月06日

人を亡くすといふこと

数年前に、自分のことを幼少のころから知っている人間を立て続けに亡くしたことがあります。

亡くなった人は、大往生という年齢だったので、どちらかというと”お疲れ様でした”という気持ちだったのですが。

葬儀の後、会社に出て仕事をしていると、自分の体にすごい違和感があります。体が思うように動かないのです。

「疲れ」とかではないのですよね。何か「心」というか「魂」的なところで部分的に喪失しているような感覚なのです。

しばらくして、元にもどりましたが、何がおきたのか考えてみると。。。

「私」を「私」たらしめるものは、もちろん私の記憶が主体になるのでしょうが、実は私のことを知っている人の「私に関する記憶」も、私を構成する一部なんだと思っています。

なので、私のことを幼少のころから知っている人間が亡くなると、その人間の持っていた「私に関する記憶」も失われてしまうわけでして、結果として私自身の一部を失ってしまうのと同義なのです。

昔に感じた喪失感は、そういうことなんだと思います。

昨日、幼少のころからお世話になっていた方の訃報が届きまして、そんなことを考えました。

posted by 台北猫々 at 09:21| Comment(0) | TrackBack(0) | 日記

2008年04月05日

「各種言語スケルトン」を更新しました。

一部歯抜けですが、
■ファイルダウンロード(Webサーバ側)ロジック
・Java
・PHP
・Ruby
・Perl
・Python

■CSVファイル読み込みロジック
・C++
・Java
・PHP
・Ruby
・Perl
・Python
・なでしこ
・Bシェル
の2つのロジックを追加しました。

「各種言語スケルトン」
http://winter-tail.sakura.ne.jp/sub6_logic_skeleton.html

こういった定番処理だと、やはりLLが圧倒的に楽チンに弾けますね。猫
posted by 台北猫々 at 07:01| Comment(0) | TrackBack(0) | 日記

2008年04月04日

正規表現で、文字列は全てASCII文字か?のチェック(Java編)


/**
* 全てASCII文字か?
* @param str チェック対象文字列
* @return はい:true いいえ:false
*/

public static boolean isAsciiOnly(String str) {
return str.matches("^[\\u0020-\\u007E]+$");
}




良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 20:38| Comment(0) | TrackBack(0) | 技術メモ(Java)

2008年04月03日

正規表現で、文字列は全てASCII文字か?のチェック(PHP編)

<?php

//全てASCII文字か?
//PHPの正規表現で、渡された文字列が全てASCII文字かチェックします。
//PHP 正規表現 ASCII UTF8
$str = " abcdefghijklmnopqrstuvwxyz!#$%&'()[]@";
if (preg_match("/^[\x20-\x7E]+$/", $str)) {
echo "すべてASCIIである"."<br>\n";
} else {
echo "すべてASCIIではない"."<br>\n";
}
//↓
//"すべてASCIIである"

posted by 台北猫々 at 20:10| Comment(0) | TrackBack(0) | 技術メモ(PHP)

2008年04月02日

春!

ぼけてますが、つくしです。

IMG_0234.JPG
posted by 台北猫々 at 19:16| Comment(0) | TrackBack(0) | 日記

2008年04月01日

PHPの終了タグ ("?>") について

以前にPHPの終了タグ ("?>") について、「?>の後ろの改行」のようなことを書いたのですが、以下のような記述がありました。

============================
PHP コードのみからなるファイルでは、終了タグ ("?>") は決して含めてはいけません。終了タグは、PHP には必要ありません。 終了タグを省略することで、ファイルの最後にある空白文字が出力に影響することを防ぎます。
============================
Programmer's Reference Guideより


Zendのサイトでの記述なので、PHP コードのみからなるファイルでは終了タグ は記述しないのが正解ということなのですね。

#普通逆じゃないかな?という違和感はありますが(私だけ?(^^;)。


良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 19:56| Comment(0) | TrackBack(0) | 技術メモ(PHP)