このページは福井県立大学の田中求之が2006年1月まで運用していた Mac のサーバ運用に関する会議室 「Web Scripter's Meeting」の記録です。情報が古くなっている可能性がありますのでご注意ください。

Macバイナリのデータフォーク部分を抽出するには?

発言者:Junnama
( Date Thursday, June 21, 2001 12:02:55 )


Junnamaです。

以前から何度か話題に上がっている画像のアップロード機能付きBBS(のような
もの)を作ろうとしています。
但し、誰もが書き込めるものではなく、発信者のみがアップできるもの(つまり
一方的な発信専用に使う)にする予定です。

色々考えたのですが、以下のような方法をとろうと思っています。

1.Webサーバー(QPQかWeb共有)で運用(ポート80)
2.オリジナルの単機能サーバー(別のポート)---REALbasicで作成、ブラウザか
らPUTされたデータを受け取ってファイルに保存するもの

1.のサーバーで送信フォームを送り出し、
ブラウザからのPUT(マルチパート)で2.の単機能サーバーにPUTする

これで、データを受け取ることには成功したのですが(割と大きなファイルでも
受け取れました)、

(ここから本題です)

クライアントがMacの場合、マルチパートで送られるデータがMacバイナリ形式に
なりますね。
受け取ったデータを「ファイル名.bin」で保存して、StuffItで解凍すると、ち
ゃんと元のデータが復元できたのですが、StuffIt等を使わずに、ファイルのデ
ータフォーク部分のみを取り出すことはできるでしょうか?(できるとは思うの
ですが、どうにもMacバイナリの解析方法が分かりません)
データフォークのみを保存する方が当然安全ですし、アップロードするのはWeb
で表示するための画像と考えていますので、特にリソースフォークは必要ないの
です。

日本語の資料の在り処か、ヒントなど、どなたか御存じありませんか?

重松修 さんからのコメント
( Thursday, June 21, 2001 12:15:34 )

REALbasic のプラグインは私がすでに作ってあります。
メモリ上からダイレクトにファイルが出力できます。
ただし、MacBinaryIII だけしか対応していませんし、PPC だけです。
ソースがあるので、必要に応じて、手直しして似るなり焼くなり、
ご自由に活用してください。

http://www.ravi.ne.jp/TAO/

P.S.
日本語の資料、というのにこだわると、情報ががくんと減りますよ。

今泉克美 さんからのコメント
( Thursday, June 21, 2001 22:12:42 )

Junnamaさんがプライベートでおひとりで
使うのであれば
(そんなこと、普通ないでしょうね、CGIを公開しますか?)
MACクライアントのIE5.0をお使いになればよろしいかと。
IE5 では、該当するファイルタイプの
 [ファイルヘルパーの編集]にて、
[Macintosh ファイル] にチェックが入っていない場合、
MacBinary ヘッダ等を削除した形でアップロードする
とのことです。

ところで
今回の質問にはそのまんま使えないようですが
重松さんのお作りになった
JPEGBatcher 1.2.2J (PPC) 
って最強じゃぁないですか?
美しさをたもったままの高い圧縮ですし
個人で使うならこれでリソースフォークを
とっぱらってしまえば、
アップロード後、問題がおきませんよね(たぶん)

でも、Junnamaさんだけが使うCGIじゃぁ
ないのでしょうね、きっと。

Junnama さんからのコメント
( Friday, June 22, 2001 09:46:52 )

>Junnamaさんがプライベートでおひとりで
>使うのであれば

「利用は単独でひとりで(私に限らず)」、ということになります。

ところで、昨日テストしていたところ、Netscape(4.7)やiCabでは、バイナリー
で転送されている気配がない...


<FORM ACTION="http://アドレス:ポート/" METHOD="POST" ENCTYPE="multipart/
form-data">

ひょっとして、"POST"だからか?
これでやっているのですが、100Kを超えても全然問題なしです。

実は、大分前に作りかけのものがあって、その時には確かに
"Content-Type: application/x-macbinary"
となっていたような気がするのですが、記憶違いかも?

Junnama さんからのコメント
( Friday, June 22, 2001 09:51:51 )

>REALbasic のプラグインは私がすでに作ってあります。

重松さんのプラグインは存じ上げていました。

やはりMacBinaryIIIのみということと、実は私はこの手のツールを作る時はREAL
basic1.1で作りますので(どうにも1.1の方が速いような気がする)、やはり自
前で実装したいなと考えています。

重松修 さんからのコメント
( Friday, June 22, 2001 10:06:52 )

とりあえず、データフォークのみ抽出するならば、簡単です。
先頭の 128 バイトくらい (すいません、うろ覚えで) が、
ヘッダ情報になります。まず、ここを読んで、データフォークのサイズを取得します。
たとえば、データフォークのサイズが 400 バイトならば、

df = MidB(buf, 128, 400)

のような感じで簡単に抜き出せると思います。

ヘッダ情報は、MemoryBlock を使うと簡単に必要な情報にアクセス可能と
思います。

がんばってください。