ページ

2008年1月5日土曜日

Safariから画像をドラッグ&ドロップして保存する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

Safariからデスクトップ(Finder)へ画像をドラッグ&ドロップすると元々の画像形式・ファイル名でファイルが作成される。



これと同じことがやりたい。前回のペーストボードのタイプで NSFilesPromisePboardType を指定していたのを思い出して調べてみた。
Dragging File Promises

これによると NSDraggingInfo の namesOfPromisedFilesDroppedAtDestination:dropLocation を使うとドラッグソース(今回の場合 Safari)に dropLocationで指すフォルダへファイルを書き出させることができるらしい。早速試してみたところうまくいった。

サンプル DandD-2.zip



Safariからアプリへ画像をドラッグ&ドロップするとデスクトップに画像ファイルが作成される。
おお。これは楽だ。

コードはこんな感じ。


- (BOOL)performDragOperation:(id )sender {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES);
NSURL *dropLocation = [NSURL URLWithString:[paths objectAtIndex:0]];
NSArray *filenames = [sender namesOfPromisedFilesDroppedAtDestination:dropLocation];
NSLog(@"%@", filenames);
return YES;
}




調子にのって FireFoxから画像をドラッグ&ドロップしてみるとエラーで怒られた。

2008-01-05 22:06:57.845 DandD[18035:10b] Couldn't get a copy of an HFS Promise from the pasteboard
2008-01-05 22:06:57.849 DandD[18035:10b] Couldn't get a copy of the FSSP data from the pasteboard
2008-01-05 22:06:57.849 DandD[18035:10b] Looked for HFSPromises on the pasteboard, but found none.


ふむ。FireFoxの場合はどうすれば良いのだろうか?