以下、本発明を実施するための形態について図面を用いて詳細に説明する。本発明は、ネットワークを介して接続された端末装置とストレージサーバとの間でファイルを送受信するシステムにおいて、端末装置及びストレージサーバが、ファイルを所定サイズに分割した領域毎のハッシュ値及び領域データを含む領域データファイルを格納し、両ハッシュ値を比較することにより、更新された領域を特定し、その領域データを送受信することを特徴とする。これにより、全てのデータを送信する必要がないから、送信データ量を低減することができ、送信処理速度を向上させることができる。尚、本発明は、以下に示すファイル同期システムに適用されるが、このファイル同期システムは一例であり、他のシステムにも適用がある。
本発明が適用されるファイル同期システムの一例は、複数の端末装置、及び端末装置によりアクセス可能なフォルダを備えたストレージサーバがネットワークを介して接続されるファイル同期システムにおいて、端末装置にてユーザにより操作されるファイルと、ストレージサーバのフォルダに格納されたファイルとの間の同期を確立する際に、ファイルの属性を送受信する。
具体的には、端末装置を使用するユーザによりファイル操作が行われると、端末装置は、そのファイルの属性群(属性データ)を生成してストレージサーバへ送信する。ここで、ファイルの属性群は、ファイルの属性が定義されたデータであり、端末装置により生成される。また、後述するFIも、ファイルの属性が定義されたデータであり、ストレージサーバにより生成される。そして、ストレージサーバは、ファイル操作の種別を特定し、ファイル操作の種別に応じたファイル処理(新規ファイルの格納、ファイルの更新、ファイルの削除等)を行い、新たなFIを生成し、この新たなFIを、ファイル操作が行われた端末装置へ送信すると共に、フォルダに属する全てのファイルのFIを、他の端末装置へ送信する。これにより、ストレージサーバに接続されている全ての端末装置及びストレージサーバは、フォルダ内の同一ファイルに対応する同一のFIを保持することができ、ファイル同期を確立することができる。したがって、ユーザによるファイル操作に伴って、ファイルをその都度送受信する必要がなく、必要なときにのみファイルの送受信を行えばよいから、ファイル同期の処理を低負荷かつ高効率に実現することが可能となる。
ここで、ファイル操作には、新規ファイル作成、ファイル更新、ファイル削除、ファイル名変更、ファイル移動及びファイルコピーがある。新規ファイル作成は、フォルダ内に新たなファイルを作成する操作である。この操作により、新たなファイルがフォルダに格納され、新たなFIが生成される。ファイル更新は、フォルダ内に存在するファイルのデータを更新する操作である。この操作により、ファイル内に存在する更新対象のファイルが削除され、新たな更新ファイルがフォルダに格納される。また、FIも更新される。ファイル削除は、フォルダ内に存在するファイルを削除する操作である。この操作により、FIも削除される。ファイル名変更は、フォルダ内に存在するファイルの名称を変更する操作である。この操作により、ファイルはそのまま格納された状態で、FIに含まれるファイル名が新しくなる。ファイル移動は、フォルダ内に存在するファイルを他のフォルダへ移動する操作である。この操作により、ファイルはそのまま格納された状態で、FIに含まれるファイルパスが新しくなる。ファイルコピーは、フォルダ内に存在するファイルをコピーして新たなファイルを作成する操作である。この操作により、コピー元のファイルはそのままの状態で、コピー先の新たなファイルが作成される、また、コピー元のファイルについてのFIとは別にコピー先のファイルについての新たなFIが生成される。FIの詳細については後述する。
〔ファイル同期システムの構成〕
まず、本発明の実施形態によるファイル同期システムの構成について説明する。図1は、ファイル同期システムの全体構成を示す図である。このファイル同期システム10は、複数の端末装置1−1,1−2,・・・、API(Application Program Interface)サーバ2、ストレージサーバ3、イベントサーバ4及びコネクションサーバ5を備えて構成される。複数の端末装置1−1,1−2,・・・、APIサーバ2、ストレージサーバ3、イベントサーバ4及びコネクションサーバ5は、ネットワーク6を介してそれぞれ接続される。図1において、APIサーバ2、ストレージサーバ3、イベントサーバ4及びコネクションサーバ5は、説明の便宜上1台のみ記載してあるが、ファイル同期システム10の規模に応じて複数台存在する場合もあり得る。また、APIサーバ2及びストレージサーバ3を1台のストレージサーバとして構成してもよいし、イベントサーバ4及びコネクションサーバ5を1台のイベント通知サーバとして構成するようにしてもよい。ネットワーク6は、例えば、インターネット、LAN(Local Area Network)等の通信網である。
端末装置1−1,1−2,・・・(以下、総称して端末装置1という。)は、例えばパーソナルコンピュータであり、ユーザにより携帯可能な携帯電話機、PDA(Personal Digital Assistant)、ミュージックプレーヤ、デジタルカメラ等の携帯端末であってもよい。端末装置1が携帯端末の場合、端末装置1は、無線通信網及び中継サーバを介してネットワーク6に接続される。端末装置1は、ストレージサーバ3に備えたフォルダにアクセス可能なユーザにより使用される装置であり、ユーザの操作に従って、ファイル同期システム10を構成するネットワーク6へログインする。また、端末装置1は、ユーザによりファイル操作が行われ、ストレージサーバ3からフォルダ内のファイルをダウンロードしたり、新たなファイルまたは更新したファイルをストレージサーバ3へアップロードしたりする。
APIサーバ2は、端末装置1とストレージサーバ3との間で、及び、ストレージサーバ3とイベントサーバ4との間でデータ送受信の橋渡しを行う。例えば、端末装置1がWebブラウザを用いてHTTP(HyperText Transfer Protocol)通信を行う場合、HTTP通信の処理を行い、ストレージサーバ3との間でデータを受け渡す。
ストレージサーバ3は、端末装置1によりアクセス可能なフォルダを備えており、フォルダ内のファイル、及びフォルダへアクセス可能なユーザを管理する。また、ファイル同期のために用いるFIを、フォルダ内のファイルに対応付けて管理する。
イベントサーバ4は、ネットワーク6にログインしている端末装置1及びユーザに関する情報(端末装置1及びユーザに関する情報をユーザ固有情報という。)をコネクションサーバ5から受信して格納する。また、イベントサーバ4は、ストレージサーバ3に格納されているFIが更新された場合、その更新有りのイベントを通知する通知先の端末装置1を特定し、その更新されたことを示す情報をイベント情報として、コネクションサーバ5を介して端末装置1へ通知する。
コネクションサーバ5は、端末装置1が、ユーザによりファイル同期システム10を構成するネットワーク6へログインした場合、ログインしたユーザ及び接続された端末装置1のユーザ固有情報を接続情報として管理する。すなわち、コネクションサーバ5は、ストレージサーバ3に備えたフォルダへアクセスしているユーザ、及びこのユーザが使用している端末装置1に関するユーザ固有情報を接続情報として管理する。
〔ファイル操作時の情報の流れ〕
次に、図1に示したファイル同期システム10において、端末装置1を使用するユーザによりファイル操作が行われた場合の情報の流れについて説明する。図2は、ファイル操作時の情報の流れを示す図である。図2において、ユーザ(ユーザID:A)が端末装置1−1(端末ID:PC−A)を使用し、ユーザ(ユーザID:B)が端末装置1−2(端末ID:PC−B)を使用し、端末装置1−1,1−2が、APIサーバ2を介してストレージサーバ3に接続されているものとする。
(1)ログイン情報
まず、端末装置1−1を使用するユーザが、ファイル同期システム10によりフォルダのファイルを操作するためのアプリケーションプログラムを実行すると、端末装置1−1は、ファイル同期システム10のネットワーク6へログインする。これにより、ログイン情報(ユーザID:A,端末ID:PC−A)が、端末装置1−1からコネクションサーバ5へ送信される。また、端末装置1−2を使用するユーザが、同様のアプリケーションプログラムを実行すると、端末装置1−2は、ファイル同期システム10のネットワーク6へログインする。これにより、ログイン情報(ユーザID:B,端末ID:PC−B)が、端末装置1−2からコネクションサーバ5へ送信される。尚、図示していないが、コネクションサーバ5は、端末装置1−1,1−2から受信したログイン情報を、端末装置1−1,1−2からストレージサーバ3への接続情報としてイベントサーバ4へ送信する。
また、端末装置1−1,1−2は、APIサーバ2を介してストレージサーバ3へアクセスし、共有フォルダに属するファイルのFIを、APIサーバ2を介して受信し、共有フォルダ及び共有フォルダに属するファイルのアイコンを表示する。
(2)(3)ファイル操作通知
端末装置1−2を使用するユーザが、共有フォルダ内のファイルを指定してファイル操作を行うと、端末装置1−2は、そのファイルについての複数の属性からなる属性群を生成し、属性群を含むファイル操作通知をAPIサーバ2へ送信する。属性群は、ファイル操作の種別に応じて異なる複数の属性により構成される。そして、APIサーバ2は、端末装置1−2からファイル操作通知を受信すると、受信したファイル操作通知をストレージサーバ3へ送信する。
ストレージサーバ3は、APIサーバ2からファイル操作通知を受信すると、ファイル操作の種別を特定し、ファイル操作の種別に応じた処理(新規ファイルの格納、ファイルの更新、ファイルの削除等)を行い、ファイル操作が行われたファイルについての新たなFIを生成する。そして、ストレージサーバ3は、ファイル操作が行われた端末装置1−2以外の他の端末装置1−1へFIが更新されたことを通知するための更新通知(イベント種類(更新有り)、共有情報(ユーザID:A,B)、上位フォルダのパス(ファイル操作が行われたファイルの属するフォルダ)、送信元端末ID(PC−B))を生成する。ここで、共有情報は、共有フォルダへのアクセスが許可されているユーザのユーザIDであり、上位フォルダのパスは、ファイル操作が行われたファイルの属するフォルダの所在を示すパスである。更新通知の詳細については後述する。
(4’)(5’)FI
ストレージサーバ3は、生成した新たなFIをAPIサーバ2へ送信する。そして、APIサーバ2は、ストレージサーバ3から受信したFIを端末装置1−2へ送信する。この場合、APIサーバ2は、FIと共に、ファイル操作が行われた端末装置1−2の端末ID:PC−Bも受信することにより、FIの送信先を判断する。端末装置1−2は、APIサーバ2から新たなFIを受信する。
図3は、イベント通知シーケンスを説明する図である。このイベント通知シーケンスは、図2における(4)〜(13)のシーケンスに相当し、端末装置1−2におけるファイル操作に伴って、FIが更新されたことを示す(新たなFIが生成されたことを示す)イベントを端末装置1−1へ通知するための手順を示している。以下、図2及び図3を参照して説明する。
(4)(5)更新通知
ストレージサーバ3は、更新通知をAPIサーバ2へ送信する。APIサーバ2は、ストレージサーバ3から更新通知を受信すると、更新通知を格納し、更新通知をイベントサーバ4へ送信する。
(6)更新指令
イベントサーバ4は、更新通知を受信すると、格納している接続情報を参照し、更新通知に含まれる共有情報(ユーザID:A,B)及び送信元端末ID(PC−B)に基づいて、この更新のイベントを通知する通知先の端末装置1−1(端末ID:PC−A)を特定する。そして、イベントサーバ4は、更新のイベントの通知先である通知先端末ID(PC−A)を含む更新指令をコネクションサーバ5へ送信する。
(7)更新有り
コネクションサーバ5は、イベントサーバ4から更新指令を受信すると、更新指令に含まれる通知先端末ID(PC−A)である端末装置1−1へ更新有りの情報を送信する。これにより、端末装置1−1は、ストレージサーバ3の共有フォルダ内のファイルが更新されたことを判断することができ、新たなFIをストレージサーバ3から取得するための処理を行う。
(8)更新情報取得要求
端末装置1−1は、コネクションサーバ5から更新有りの情報を受信すると、新たなFIを取得するに先立って、新たなFIのファイルが属する上位のフォルダのパスを取得するために、自らの端末ID(PC−A)を含む更新情報取得要求をAPIサーバ2へ送信する。
(9)上位フォルダのパス
APIサーバ2は、端末装置1−1から更新情報取得要求を受信すると、格納している更新通知を参照し、更新情報取得要求に含まれる端末ID(PC−A)に基づいて、上位フォルダのパスを特定する。そして、APIサーバ2は、上位フォルダのパスを端末装置1−1へ送信する。これにより、端末装置1−1は、更新されたファイルが属する上位フォルダのパスを判断することができ、その上位フォルダに属する全てのファイルのFIを取得するための処理を行う。上位フォルダに属する全てのファイルのFIを取得するのは、全てのFIの中に、端末装置1−2におけるファイル操作によって生成された新たなFIが含まれているからである。
(10)(11)FI取得要求
端末装置1−1は、APIサーバ2から上位フォルダのパスを受信すると、その上位フォルダに属する全てのファイルのFIを取得するために、その上位フォルダのパスを含むFI取得要求をAPIサーバ2へ送信する。APIサーバ2は、端末装置1−1からFI取得要求を受信すると、受信したFI取得要求をストレージサーバ3へ送信する。尚、上位フォルダに属する全てのファイルのFIとは、共有フォルダに属する全ての共有ファイルのFIをいい、共有フォルダに属する共有ファイル以外のファイルのFIは含まない。共有フォルダに属するファイルには、複数のユーザによりアクセス可能な共有ファイルの他、複数のユーザによっては共有されず、特定のユーザのみがアクセス可能なファイルも存在するからである。以下の説明においても同様である。
(12)(13)FI群
ストレージサーバ3は、APIサーバ2からFI取得要求を受信すると、FI取得要求に含まれる上位フォルダのパスに基づいて、ストレージサーバ3に格納された全てのFIの中から、この上位フォルダに属するファイルのFIを特定し、FI群をAPIサーバ2へ送信する。APIサーバ2は、ストレージサーバ3からFI群を受信すると、このFI群を端末装置1−1へ送信する。
このように、端末装置1−2におけるファイル操作に伴って、ストレージサーバ3により新たに生成されたFIは、ストレージサーバ3からAPIサーバ2を介して端末装置1−2へ送信される。また、前述のイベント通知シーケンスによって、FIが更新されたことを示す情報(更新のイベント)が、APIサーバ2、イベントサーバ4及びコネクションサーバ5を介して他の端末装置1−1へ送信され、共有フォルダに属する全てのファイルのFI(新たに生成されたFIを含む)が、APIサーバ2を介して端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、新たな同一のFIを保持することができ、ファイル同期を確立することができる。
尚、ログイン情報等(1)(7)は、SSL(Secure Socket Layer)のプロトコルは用いられず、非SSLにて行われる。このうち、ログイン情報(1)は、Cookie(Ecookie)により暗号化され、更新有りの情報(7)は、暗号化されない実データとして、端末装置1とコネクションサーバ5との間で送受信される。これにより、端末装置1及びコネクションサーバ5における処理負荷を軽減することができる。また、各種情報(5’)(8)(9)(10)(13)は、端末装置1とAPIサーバ2との間で、SSLのプロトコルによる暗号化データとして送受信される。これは、上位フォルダのパス、FI等のデータは秘匿化する必要性が高いからである。これにより、共有フォルダ及びFI等に関する情報が秘匿化され、情報のセキュリティを確保することができる。
〔ファイル操作時のFIの変遷〕
次に、図2に示したファイル操作時の情報の流れにおけるFIの変遷について説明する。まず、FIについて詳細に説明する。図4は、FIの構成を示す図である。このFIは、ファイルの属性を示す複数の情報から構成され、具体的には、ユニークID:a、ファイルサイズ:b、ハッシュ値:c、Eタグ(Entityタグ):d、ファイル名:e、ファイルパス:f及び更新日時:gの各属性から構成される。1つのファイルに対応して1つのFIが存在する。ユニークIDは、ファイルを一意に特定するための値であり、ファイル毎に異なる値が付与される。ファイルサイズは、ファイルの大きさを示す値であり、ハッシュ値は、ハッシュ関数により得られたファイルデータの関数値である。Eタグは、ファイルが操作されたときに新たに付与される値であり、後述するファイル衝突を判定するために用いられる。ファイル名は、ファイルの名称であり、ファイルパスは、フォルダ内におけるファイルの所在を示すアドレスであり、更新日時は、FIが新たに生成され、または更新された日時である。尚、FIが新たに生成される場合、新たなユニークIDが付与され、FIが更新される場合、FIのユニークIDは、以前と同じ値が用いられる。例えば、新規ファイルが作成された場合、またはファイルがコピーされた場合には、ストレージサーバ3により、新たなファイルまたはコピー先のファイルに対し、新たなユニークIDを含むFIが生成される。また、例えば、ファイルが更新された場合、更新されたファイルに対し、更新前と同じユニークIDを含むFIが生成される。以下、新規ファイル作成、ファイル更新、ファイル削除、ファイル名変更、ファイル移動及びファイルコピーの各ファイル操作において、FIの変遷について具体的に説明する。
(新規ファイル作成時のFI)
まず、新規ファイル作成時のFIの変遷について説明する。図5は、新規ファイル作成時のFIの変遷を説明する図である。図5において、APIサーバ2、イベントサーバ4及びコネクションサーバ5、並びにこれらの装置にて送受信される情報は省略してある。また、図5の(2)(3)(4’)(5’)(4)〜(11)(12)(13)の情報は、図2及び図3に示したものと同一である。図6〜図10においても同じである。
また、ユーザ(ユーザID:A)が使用する端末装置1−1(端末ID:PC−A)、及びユーザ(ユーザID:B)が使用する端末装置1−2(端末ID:PC−B)は、ファイル同期システム10のネットワーク6へログインし、ストレージサーバ3に備えた共有フォルダへアクセスし、共有フォルダに属する全てのファイルのFI(β1),・・・,FI(βn)をストレージサーバ3から取得し、保持しているものとする。つまり、端末装置1−1,1−2は、同一のFI(β1),・・・,FI(βn)をそれぞれ保持している。β1〜βnは、個々のファイルを便宜上区別するための識別子であり、例えば、FI(β1)は、ファイルβ1のFIを示す。図5において、端末装置1−1,1−2は、共有フォルダのアイコンを表示しているものとする。
ここで、端末装置1−2を使用するユーザが、共有フォルダ内に新たなファイルを作成する操作を行い、新規ファイル作成の操作を完了する。そうすると、端末装置1−2は、ヌルのユニークID、ファイルサイズb1、ハッシュ値c1、ヌルのEタグ、ファイル名e1、ファイルパスf1及びヌルの更新日時を付与し、これらの属性を含む属性群を生成する。そして、端末装置1−2は、属性群(−,b1,c1,−,e1,f1,−)、ファイルデータ、自らの端末ID(PC−B)及びファイル操作種別データ(新規ファイル作成を示すデータ)を含むファイル操作通知を生成し、ファイル操作通知(2)(3)を、APIサーバ2を介してストレージサーバ3へ送信する。
ストレージサーバ3は、端末装置1−2からAPIサーバ2を介してファイル操作通知を受信すると、ファイル操作の種別を「新規ファイル作成」に特定し、端末装置1−2からアップロードした新たなファイルを格納する。そして、ストレージサーバ3は、ユニークIDa2、Eタグd2及び更新日時g2を付与し、これらの属性を含む新たなFI(a2,b1,c1,d2,e1,f1,g2)を生成し、格納する。これにより、新たなファイルに対応するFI(βz)が生成される。
ストレージサーバ3は、新たなFI(βz)(4’)(5’)を、APIサーバ2を介して端末装置1−2へ送信する。これにより、端末装置1−2は、共有フォルダに属するファイルのFIにFI(βz)を追加し、FI(β1),・・・,FI(βn),FI(βz)を保持する。
また、ストレージサーバ3は、図2及び図3に示したイベント通知シーケンス(4)〜(11)(12)(13)により、共有フォルダに属する全てのファイルのFI群であるFI(β1),・・・,FI(βn),FI(βz)を端末装置1−1へ送信する。これにより、端末装置1−1は、共有フォルダに属するファイルのFIとして、FI(β1),・・・,FI(βn),FI(βz)を保持する。
このように、端末装置1−2における新規ファイル作成の操作に伴って、新たなファイルは、端末装置1−2からAPIサーバ2を介してストレージサーバ3へアップロードされ、ストレージサーバ3により新たに生成された、新たなファイルに対応するFI(βz)は、ストレージサーバ3からAPIサーバ2を介して端末装置1−2へ送信される。また、共有フォルダに属する全てのファイルのFI群(新たに作成されたFI(βz)を含む)は、イベント通知シーケンスによって端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、新たな同一のFI(βz)を保持することができ、ファイル同期を確立することができる。
(ファイル更新時のFI)
次に、ファイル更新時のFIの変遷について説明する。図6は、ファイル更新時のFIの変遷を説明する図である。図5と同様に、端末装置1−1,1−2は、ファイル同期システム10のネットワーク6にログインし、ストレージサーバ3から共有フォルダに属する全てのファイルのFIを取得し、同一のFI(β1),・・・,FI(βn)をそれぞれ保持しているものとする。ここで、FI(βn)は、ユニークIDa、ファイルサイズb、ハッシュ値c、Eタグd、ファイル名e、ファイルパスf及び更新日時gから構成され、FI(a,b,c,d,e,f,g)とする。
ここで、端末装置1−2を使用するユーザが、共有フォルダ内のFI(βn)のファイルをストレージサーバ3からダウンロードし、そのファイルを更新する操作を行い、ファイル更新の操作を完了する。そうすると、端末装置1−2は、ファイルサイズb1及びハッシュ値c1を付与し、これらの属性を含む属性群(a,b1,c1,d,e,f,g)を生成する。そして、端末装置1−2は、属性群(a,b1,c1,d,e,f,g)、ファイルデータ、自らの端末ID(PC−B)及びファイル操作種別データ(ファイル更新を示すデータ)を含むファイル操作通知を生成し、ファイル操作通知(2)(3)を、APIサーバ2を介してストレージサーバ3へ送信する。
ストレージサーバ3は、端末装置1−2からAPIサーバ2を介してファイル操作通知を受信すると、ファイル操作の種別を「ファイル更新」に特定し、端末装置1−2からアップロードした更新ファイルを格納する。そして、ストレージサーバ3は、Eタグd2及び更新日時g2を付与し、これらの属性と、受信したファイル操作通知に含まれる属性群のユニークIDa、ファイルサイズb1、ハッシュ値c1、ファイル名e及びファイルパスfとにより、FI(a,b1,c1,d2,e,f,g2)を生成(更新)し、上書きする。これにより、更新ファイルに対応するFI(βn)が生成される。
ストレージサーバ3は、FI(βn)(4’)(5’)を、APIサーバ2を介して端末装置1−2へ送信する。これにより、端末装置1−2は、共有フォルダに属するファイルのFI(βn)を更新し、FI(β1),・・・及び更新したFI(βn)を保持する。
また、ストレージサーバ3は、図2及び図3に示したイベント通知シーケンス(4)〜(11)(12)(13)により、共有フォルダに属する全てのファイルのFI群であるFI(β1),・・・,FI(βn)を端末装置1−1へ送信する。これにより、端末装置1−1は、共有フォルダに属するファイルのFIとして、FI(β1),・・・及び更新したFI(βn)を保持する。
このように、端末装置1−2におけるファイル更新の操作に伴って、更新ファイルは、端末装置1−2からAPIサーバ2を介してストレージサーバ3へアップロードされ、ストレージサーバ3により生成(更新)された、更新ファイルに対応するFI(βn)は、ストレージサーバ3からAPIサーバ2を介して端末装置1−2へ送信される。また、共有フォルダに属する全てのファイルのFI群(更新されたFI(βn)を含む)は、イベント通知シーケンスによって端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、更新された同一のFI(βn)を保持することができ、ファイル同期を確立することができる。
(ファイル削除時のFI)
次に、ファイル削除時のFIの変遷について説明する。図7は、ファイル削除時のFIの変遷を説明する図である。端末装置1−1,1−2は、ファイル同期システム10のネットワーク6にログインし、ストレージサーバ3から共有フォルダに属する全てのファイルのFIを取得し、同一のFI(β1),・・・,FI(βm),FI(βn)をそれぞれ保持しているものとする。ここで、FI(βn)は、ユニークIDa、ファイルサイズb、ハッシュ値c、Eタグd、ファイル名e、ファイルパスf及び更新日時gから構成され、FI(a,b,c,d,e,f,g)とする。
ここで、端末装置1−2を使用するユーザが、共有フォルダ内のFI(βn)のファイルを削除する操作を行い、ファイル削除の操作を完了する。そうすると、端末装置1−2は、保持しているFI(βn)の属性を用いて属性群(a,b,c,d,e,f,g)を生成し、属性群(a,b,c,d,e,f,g)、自らの端末ID(PC−B)及びファイル操作種別データ(ファイル削除を示すデータ)を含むファイル操作通知を生成し、ファイル操作通知(2)(3)を、APIサーバ2を介してストレージサーバ3へ送信する。また、端末装置1−2は、FI(βn)を削除する。これにより、端末装置1−2は、共有フォルダに属するファイルのFIとして、FI(β1),・・・,FI(βm)を保持する。尚、端末装置1−2は、ユニークIDa、ファイル削除の操作が行われたことを示す情報及び自らの端末ID(PC−B)を含むファイル操作通知を送信するようにしてもよい。
ストレージサーバ3は、端末装置1−2からAPIサーバ2を介してファイル操作通知を受信すると、ファイル操作の種別を「ファイル削除」に特定し、FI(βn)のファイルを削除すると共に、FI(βn)を削除する。
ストレージサーバ3は、図2及び図3に示したイベント通知シーケンス(4)〜(11)(12)(13)により、共有フォルダに属する全てのファイルのFI群であるFI(β1),・・・,FI(βm)を端末装置1−1へ送信する。これにより、端末装置1−1は、共有フォルダに属するファイルのFIとして、FI(β1),・・・,FI(βm)を保持する。
このように、端末装置1−2におけるファイル削除の操作に伴って、削除対象のファイルについてのFI(βn)は、端末装置1−2及びストレージサーバ3において削除される。また、共有フォルダに属する全てのファイルのFI群(削除されたFI(βn)は含まない)は、イベント通知シーケンスによって端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、削除されたFI(βn)を含まない同一のFI群を保持することができ、ファイル同期を確立することができる。
(ファイル名変更時のFI)
次に、ファイル名変更時のFIの変遷について説明する。図8は、ファイル名変更時のFIの変遷を説明する図である。図5及び図6と同様に、端末装置1−1,1−2は、ファイル同期システム10のネットワーク6にログインし、ストレージサーバ3から共有フォルダに属する全てのファイルのFIを取得し、同一のFI(β1),・・・,FI(βn)をそれぞれ保持しているものとする。ここで、FI(βn)は、ユニークIDa、ファイルサイズb、ハッシュ値c、Eタグd、ファイル名e、ファイルパスf及び更新日時gから構成され、FI(a,b,c,d,e,f,g)とする。
ここで、端末装置1−2を使用するユーザが、共有フォルダ内のFI(βn)のファイル名を変更する操作を行い、ファイル名変更の操作を完了する。そうすると、端末装置1−2は、ファイル名e1を付与し、属性群(a,b,c,d,e1,f,g)を生成し、属性群(a,b,c,d,e1,f,g)、自らの端末ID(PC−B)及びファイル操作種別データ(ファイル名変更を示すデータ)を含むファイル操作通知を生成し、ファイル操作通知(2)(3)を、APIサーバ2を介してストレージサーバ3へ送信する。
ストレージサーバ3は、端末装置1−2からAPIサーバ2を介してファイル操作通知を受信すると、ファイル操作の種別を「ファイル名変更」に特定する。そして、ストレージサーバ3は、Eタグd2及び更新日時g2を付与し、これらの属性と、受信したファイル操作通知に含まれる属性群のユニークIDa、ファイルサイズb、ハッシュ値c、ファイル名e1及びファイルパスfとにより、FI(a,b,c,d2,e1,f,g2)を生成(更新)し、上書きする。
ストレージサーバ3は、FI(βn)(4’)(5’)を、APIサーバ2を介して端末装置1−2へ送信する。これにより、端末装置1−2は、共有フォルダに属するファイルのFI(βn)を更新し、FI(β1),・・・及び更新したFI(βn)を保持する。
また、ストレージサーバ3は、図2及び図3に示したイベント通知シーケンス(4)〜(11)(12)(13)により、共有フォルダに属する全てのファイルのFI群であるFI(β1),・・・,FI(βn)を端末装置1−1へ送信する。これにより、端末装置1−1は、共有フォルダに属するファイルのFIとして、FI(β1),・・・及び更新したFI(βn)を保持する。
このように、端末装置1−2におけるファイル名変更の操作に伴って、ストレージサーバ3により生成(更新)されたFI(βn)は、ストレージサーバ3からAPIサーバ2を介して端末装置1−2へ送信される。また、共有フォルダに属する全てのファイルのFI群(更新されたFI(βn)を含む)は、イベント通知シーケンスによって端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、更新された同一のFI(βn)を保持することができ、ファイル同期を確立することができる。
(ファイル移動時のFI)
次に、ファイル移動時のFIの変遷について説明する。図9は、ファイル移動時のFIの変遷を説明する図である。端末装置1−1,1−2は、ファイル同期システム10のネットワーク6にログインし、ストレージサーバ3から共有フォルダに属する全てのファイルのFIを取得し、第1のフォルダにおいて同一のFI(β1),FI(β2)をそれぞれ保持し、第2のフォルダにおいて同一のFI(γ1)をそれぞれ保持しているものとする。ここで、FI(β2)は、ユニークIDa、ファイルサイズb、ハッシュ値c、Eタグd、ファイル名e、ファイルパスf及び更新日時gから構成され、FI(a,b,c,d,e,f,g)とする。
ここで、端末装置1−2を使用するユーザが、第1のフォルダに属するFI(β2)のファイルを、第2のフォルダへ移動する操作を行い、ファイル移動の操作を完了する。そうすると、端末装置1−2は、移動先のファイルパスf1を付与し、属性群(a,b,c,d,e,f1,g)生成し、属性群(a,b,c,d,e,f1,g)、自らの端末ID(PC−B)及びファイル操作種別データ(ファイル移動を示すデータ)を含むファイル操作通知を生成し、ファイル操作通知(2)(3)を、APIサーバ2を介してストレージサーバ3へ送信する。
ストレージサーバ3は、端末装置1−2からAPIサーバ2を介してファイル操作通知を受信すると、ファイル操作の種別を「ファイル移動」に特定する。そして、ストレージサーバ3は、Eタグd2及び更新日時g2を付与し、これらの属性と、受信したファイル操作通知に含まれる属性群のユニークIDa、ファイルサイズb、ハッシュ値c及びファイル名eとにより、FI(a,b,c,d2,e,f1,g2)を生成(更新)し、上書きする。
ストレージサーバ3は、FI(β2)(4’)(5’)を、APIサーバ2を介して端末装置1−2へ送信する。これにより、端末装置1−2は、第1のフォルダからFI(β2)を削除し、第2のフォルダにFI(β2)を追加し、第1のフォルダにおいてFI(β1)を保持し、第2のフォルダにおいてFI(γ1),FI(β2)を保持する。
また、ストレージサーバ3は、図2及び図3に示したイベント通知シーケンス(4)〜(11)(12)(13)により、共有フォルダ内の第1のフォルダに属する全てのファイルのFI群であるFI(β1)、及び第2のフォルダに属する全てのファイルのFI群であるFI(γ1),FI(β2)を端末装置1−1へ送信する。これにより、端末装置1−1は、共有フォルダに属するファイルのFIとして、第1のフォルダにおいてFI(β1)を保持し、第2のフォルダにおいてFI(γ1),FI(β2)を保持する。
このように、端末装置1−2におけるファイル移動の操作に伴って、ストレージサーバ3により生成(更新)されたFI(β2)は、ストレージサーバ3からAPIサーバ2を介して端末装置1−2へ送信される。また、ファイルの移動元である第1のフォルダ、及びファイルの移動先である第2のフォルダに属する全てのファイルのFI群(更新されたFI(β2)を含む)は、イベント通知シーケンスによって端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、第1のフォルダにおいて同一のFI(β1)を保持することができ、第2のフォルダにおいてFI(γ1)及び追加された同一のFI(β2)を保持することができ、実データのファイルを移動することなく、ファイル同期を確立することができる。
(ファイルコピー時のFI)
次に、ファイルコピー時のFIの変遷について説明する。図10は、ファイルコピー時のFIの変遷を説明する図である。図9と同様に、端末装置1−1,1−2は、ファイル同期システム10のネットワーク6にログインし、ストレージサーバ3から共有フォルダに属する全てのファイルのFIを取得し、第1のフォルダにおいて同一のFI(β1),FI(β2)をそれぞれ保持し、第2のフォルダにおいて同一のFI(γ1)をそれぞれ保持しているものとする。ここで、FI(β2)は、ユニークIDa、ファイルサイズb、ハッシュ値c、Eタグd、ファイル名e、ファイルパスf及び更新日時gから構成され、FI(a,b,c,d,e,f,g)とする。
ここで、端末装置1−2を使用するユーザが、第1のフォルダに属するFI(β2)のファイルを、第2のフォルダへコピーする操作を行い、ファイルコピーの操作を完了する。そうすると、端末装置1−2は、ヌルのユニークID及びコピー先のファイルパスf1を付与し、属性群(−,b,c,−,e,f1,−)を生成し、属性群(−,b,c,−,e,f1,−)、自らの端末ID(PC−B)及びファイル操作種別データ(ファイルコピーを示すデータ)を含むファイル操作通知を生成し、ファイル操作通知(2)(3)を、APIサーバ2を介してストレージサーバ3へ送信する。
ストレージサーバ3は、端末装置1−2からAPIサーバ2を介してファイル操作通知を受信すると、ファイル操作の種別を「ファイルコピー」に特定する。そして、ストレージサーバ3は、コピー元のファイルをコピーすることにより、コピー先のファイルとして新たなファイルを格納する。尚、コピー元のファイルは、ファイル操作通知に含まれる、コピー元ファイルのユニークID(図示せず)に基づいて特定される。そして、ストレージサーバ3は、ユニークIDa2、Eタグd2及び更新日時g2を付与し、これらの属性と、受信したファイル操作通知に含まれる属性群のファイルサイズb、ハッシュ値c及びファイル名eとにより、新たなFI(a2,b,c,d2,e,f1,g2)をFI(γ2)として生成し、格納する。これにより、ストレージサーバ3は、コピー元のファイルのFI(β2)及びコピー先のファイルのFI(γ2)を保持することになる。
ストレージサーバ3は、FI(γ2)(4’)(5’)を、APIサーバ2を介して端末装置1−2へ送信する。これにより、端末装置1−2は、第2のフォルダにFI(γ2)を追加し、第1のフォルダにおいてFI(β1),FI(β2)を保持し、第2のフォルダにおいてFI(γ1),FI(γ2)を保持する。
また、ストレージサーバ3は、図2及び図3に示したイベント通知シーケンス(4)〜(11)(12)(13)により、共有フォルダ内の第2のフォルダに属する全てのファイルのFI群であるFI(γ1),FI(γ2)を端末装置1−1へ送信する。これにより、端末装置1−1は、共有フォルダに属するファイルのFIとして、第1のフォルダにおいてFI(β1),FI(β2)を保持し、第2のフォルダにおいてFI(γ1),FI(γ2)を保持する。
このように、端末装置1−2におけるファイルコピーの操作に伴って、ストレージサーバ3により新たに生成されたFI(γ2)は、ストレージサーバ3からAPIサーバ2を介して端末装置1−2へ送信される。また、ファイルのコピー先である第2のフォルダに属する全てのファイルのFI群(新たに生成されたFI(γ2)を含む)は、イベント通知シーケンスによって端末装置1−1へ送信される。これにより、端末装置1−1,1−2及びストレージサーバ3は、第2のフォルダにおいて追加された同一のFI(γ2)を保持することができ、実データのファイルをコピーすることなく、ファイル同期を確立することができる。
〔端末装置〕
次に、図1及び図2に示した端末装置1について詳細に説明する。図15は、端末装置1の構成を示すブロック図である。この端末装置1は、通信部11、ファイル処理部12及び記憶部13を備えている。
通信部11は、所定のプロトコルを用いてAPIサーバ2及びコネクションサーバ5との間でデータの送受信を行う。ファイル同期システム10のネットワーク6へのログインに伴い、ログイン情報(ユーザID、端末ID)をコネクションサーバ5へ送信する。また、通信部11は、コネクションサーバ5から更新有りの情報を受信してファイル処理部12に出力する。また、通信部11は、ファイル処理部12からファイル操作通知、更新情報取得要求及びFI取得要求を入力してAPIサーバ2へ送信し、APIサーバ2から上位フォルダのパス及びFIを受信してファイル処理部12に出力する。また、通信部11は、APIサーバ2からユーザ選択指令を受信してファイル処理部12に出力し、ファイル処理部12からユーザ選択種別を入力してAPIサーバ2へ送信する。
ファイル処理部12は、ファイル操作部121、属性処理部122及びアイコン表示部123を備えている。ファイル操作部121は、ユーザによるファイル操作に伴って、新たなファイルを作成したり、ストレージサーバ3からファイルをダウンロードして更新したり、ファイルを削除したりする等のファイル操作に関する処理を行う。
属性処理部122は、ファイル同期システム10のネットワーク6へのログインに伴って、通信部11を介してストレージサーバ3に備えた共有フォルダへアクセスし、共有フォルダに属する全てのファイルのFIを取得し、アイコン表示部123に、共有フォルダのアイコン及びファイルのアイコンを表示させる。また、属性処理部122は、ファイル操作部121によるファイル操作の処理に従って属性群を生成し、属性群、自らの端末ID及びファイル操作種別データ(ファイル操作の種別を特定するためのデータ)等を含むファイル操作通知を生成し、通信部11へ出力する。
アイコン表示部123は、ファイル操作部121及び属性処理部122からフォルダに関する情報、及びフォルダに属するファイルのFI等を入力し、フォルダのアイコン及びファイルのアイコンを表示する。
記憶部13は、FI、ファイル及び領域データファイルを備えている。FI、ファイル及び領域データファイルは、ファイル処理部12により格納され、また、読み出される。FIを構成する属性については、図4にて説明済みであるから、ここでは説明を省略する。領域データファイルについては後述する。尚、記憶部13には、新規ファイル作成時に、新たなファイルが格納され、ファイル更新時に、ストレージサーバ3からダウンロードされたファイルが格納される。また、記憶部13に格納されたファイルはファイル処理部12により読み出され、通信部11を介してストレージサーバ3へアップロードされる。
次に、図15に示した端末装置1の処理について説明する。図16は、端末装置1の処理を示すフローチャートである。端末装置1の通信部11は、ストレージサーバ3からAPIサーバ2を介してFIを受信したか否かを判定し(ステップS1601)、FIを受信したと判定した場合(ステップS1601:Y)、受信したFIをファイル処理部12に出力する。そして、ファイル処理部12の属性処理部122は、通信部11からFIを入力し、記憶部13に格納すると共に、アイコン表示部123に出力する。アイコン表示部123は、属性処理部122からFIを入力し、FIに含まれるファイルパスに基づいて、予め設定された共有フォルダのアイコン及びファイルのアイコンを表示する(ステップS1602)。また、ファイル操作部121は、ユーザによりファイルのダウンロードの操作が行われた場合、ユーザにより指定されたファイルをダウンロードするための指示を通信部11に出力する。この指示は、APIサーバ2を介してストレージサーバ3へ送信され、ファイル操作部121は、ストレージサーバ3からAPIサーバ2を介してダウンロードしたファイルを、通信部11から入力して記憶部13に格納する(ステップS1603)。一方、通信部11は、ステップS1601において、FIを受信していないと判定した場合(ステップS1601:N)、ステップS1604へ移行する。
ファイル処理部12の属性処理部122は、ファイル操作部121によりファイル操作の処理が行われたか否かを判定し(ステップS1604)、ファイル操作の処理が行われたと判定した場合(ステップS1604:Y)、ファイル操作に伴う属性群を生成し(ステップS1605)、属性群、自らの端末ID及びファイル操作種別データ等を含むファイル操作通知を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1606)。また、属性処理部122は、ファイル操作通知の出力に伴って、ファイル操作部121により行われたファイル操作が「新規ファイル作成」または「ファイル更新」の場合、記憶部13から新たに作成されたファイルまたは更新されたファイルを読み出し、通信部11に出力する。このファイルは、APIサーバ2を介してストレージサーバ3へアップロードされる(ステップS1607)。また、属性処理部122は、ファイル操作に応じた処理を行う。例えば、ファイル操作がファイル削除の場合、削除されるファイルのFIを記憶部13から削除すると共に、アイコン表示部123に、そのファイルのアイコン表示を削除させる。一方、属性処理部122は、ステップS1604において、ファイル操作の処理が行われていないと判定した場合(ステップS1604:N)、ステップS1608へ移行する。
通信部11は、コネクションサーバ5から更新有りの情報を受信したか否かを判定し(ステップS1608)、更新有りの情報を受信したと判定した場合(ステップS1608:Y)、更新有りの情報をファイル処理部12に出力する。ファイル処理部12の属性処理部122は、通信部11から更新有りの情報を入力すると、更新情報取得要求を通信部11に出力する。この更新情報取得要求は、APIサーバ2へ送信される(ステップS1609)。APIサーバ2は、端末装置1から更新情報取得要求を受信すると、他の端末装置1によりファイル操作されたファイルが属する上位フォルダのパスを特定し、上位フォルダのパスを端末装置1へ送信する。APIサーバ2の処理については後述する。そして、属性処理部122は、APIサーバ2から受信した上位フォルダのパスを通信部11から入力すると(ステップS1610)、上位フォルダのパスを含むFI取得要求を通信部11に出力する。このFI取得要求は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1611)。このFI取得要求に対する応答であるFIは、ステップS1601及びステップS1602にて処理される。一方、通信部11は、ステップS1608において、更新有りの情報を受信していないと判定した場合(ステップS1608:N)、ステップS1612へ移行する。
ステップS1612〜ステップS1614は、ファイル衝突時の処理を示す。例えば、端末装置1は、ユーザによるファイル更新の操作に伴って、ファイル操作通知を、APIサーバ2を介してストレージサーバ3へ送信し、ストレージサーバ3は、ファイル操作通知を受信し、ファイル衝突有りを判定した場合を想定する。この場合、ストレージサーバ3は、ユーザ選択指令を、APIサーバ2を介して端末装置1(ファイル操作通知を送信してきた端末装置1)へ送信する。ファイル衝突は、ストレージサーバ3で生成されたFIが端末装置1に反映されないまま、その端末装置1でファイル操作が行われたときに生じる。例えば、第1の端末装置1及び第2の端末装置1が、同一のファイルをダウンロードした後、第1の端末装置1がオンラインからオフラインへ変更され、第2の端末装置1が、ファイル更新の処理を行い、ストレージサーバ3が、このファイル更新に伴ってFI及びファイルを更新し、第1の端末装置1がオフラインからオンラインへ変更され、ファイル更新の処理を行った場合に、ストレージサーバ3においてファイル衝突が生じる。すなわち、第2の端末装置1によるファイル更新の処理が行われ、その後に第1の端末装置1によるファイル更新の処理が行われた場合に、ファイル衝突が生じる場合がある。ファイル衝突の詳細については後述する。
端末装置1の通信部11は、ストレージサーバ3からAPIサーバ2を介して、ユーザ選択指令を受信したか否かを判定する(ステップS1612)。通信部11は、ステップS1612において、ユーザ選択指令を受信したと判定した場合(ステップS1612:Y)、ユーザ選択指令をファイル処理部12のファイル操作部121に出力する。ファイル操作部121は、通信部11からユーザ選択指令を入力すると、ユーザに、「新規ファイル保存」「強制上書き」「破棄して最新取得」「キャンセル」のうちのいずれかのユーザ選択種別を選択させる。そして、ファイル操作部121は、ユーザにより選択されたユーザ選択種別を通信部11に出力する。このユーザ選択種別は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1613)。そして、ファイル操作部121は、ユーザ選択種別に応じた処理を行う(ステップS1614)。
ここで、ユーザにより「新規ファイル保存」が選択された場合、更新ファイルは、新規ファイルとしてストレージサーバ3に格納される。また、ユーザにより「強制上書き」が選択された場合、更新ファイルは、ストレージサーバ3において上書きされる。したがって、前述の例の場合、第2の端末装置1により更新されストレージサーバ3に格納されたファイルは削除され、第1の端末装置1により更新されたファイルがストレージサーバ3に格納される。また、ユーザにより「破棄して最新取得」が選択された場合、ファイル操作部121は、記憶部13に格納されているファイル、及び属性処理部122により生成された属性群を削除する。そして、ファイル操作部121は、削除したFIの代わりに、ストレージサーバ3から送信された新たなFI(前述の例では、第2の端末装置1によるファイル更新に伴って生成されたFI)を入力し、記憶部13に格納する。また、ユーザにより「キャンセル」が選択された場合、記憶部13に記憶されたFI及び更新ファイル、属性処理部122により生成された属性群は、そのままの状態で保持される。
端末装置1は、ステップS1603、ステップS1607、ステップS1611、ステップS1614から移行すると、またはステップS1612においてユーザ選択指令を受信していないと判定した場合(ステップS1612:N)、処理を終了してステップS1601の処理を再度行う。
(FI処理部/端末装置)
次に、図15に示した端末装置1における属性処理部122の処理(ファイル操作通知生成処理)について詳細に説明する。図17は、属性処理部122のファイル操作通知生成処理を示すフローチャートであり、図16に示したステップS1604〜ステップS1607の処理に相当する。また、図18は、ファイル操作により付与される属性の一覧を示す図である。図18において、ファイル操作により付与される属性には下線を付し、ヌルが設定される属性は−で表してある。端末装置1の記憶部13には、ファイル操作の対象となるファイルのFI(ユニークIDa,ファイルサイズb,ハッシュ値c,Eタグd,ファイル名e,ファイルパスf,更新日時g)が格納されているものとする(図18において元のFIの属性を参照)。
属性処理部122は、ファイル操作部121により行われたファイル操作の処理の種別を判別する(ステップS1701)。属性処理部122は、ファイル操作が「新規ファイル作成」であると判別した場合、ファイルサイズb1、ハッシュ値c1、ファイル名e1及びファイルパスf1を付与し(ステップS1702)、ユニークID、Eタグ及び更新日時にヌルを設定し、属性群(−,b1,c1,−,e1,f1,−)を生成する(ステップS1703、図18において「新規ファイル作成」の属性を参照)。そして、属性処理部122は、この属性群を含むファイル操作通知(属性群、ファイルデータ、端末ID等)を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1704)。
属性処理部122は、ファイル操作が「ファイル更新」であると判別した場合、ファイルサイズb1及びハッシュ値c1を付与し(ステップS1705)、付与した属性及び保持しているFIの属性に基づいて、属性群(a,b1,c1,d,e,f,g)を生成する(ステップS1706、図18において「ファイル更新」の属性を参照)。そして、属性処理部122は、この属性群を含むファイル操作通知(属性群、ファイルデータ、端末ID等)を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1707)。
属性処理部122は、ファイル操作が「ファイル削除」であると判別した場合、記憶部13に格納されているFIと同一の属性を用いて、属性群を生成する(ステップS1708、図18において「ファイル削除」の属性を参照)。そして、属性処理部122は、この属性群を含むファイル操作通知(属性群、端末ID等)を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1709)。
属性処理部122は、ファイル操作が「ファイル名変更」であると判別した場合、ファイル名e1を付与し(ステップS1710)、付与した属性及び保持しているFIの属性に基づいて、属性群(a,b,c,d,e1,f,g)を生成する(ステップS1711、図18において「ファイル名変更」の属性を参照)。そして、属性処理部122は、この属性群を含むファイル操作通知(属性群、端末ID等)を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1712)。
属性処理部122は、ファイル操作が「ファイル移動」であると判別した場合、移動先のファイルパスf1を付与し(ステップS1713)、付与した属性及び保持しているFIの属性に基づいて、属性群(a,b,c,d,e,f1,g)を生成する(ステップS1714、図18において「ファイル移動」の属性を参照)。そして、属性処理部122は、この属性群を含むファイル操作通知(属性群、端末ID等)を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1715)。
属性処理部122は、ファイル操作が「ファイルコピー」であると判別した場合、コピー先のファイルパスf1を付与し(ステップS1716)、ユニークIDにヌルを設定し、付与した属性、ヌルのユニークID及び保持しているFIの属性に基づいて、属性群(−,b,c,−,e,f1,−)を生成する(ステップS1717、図18において「ファイルコピー」の属性を参照)。そして、属性処理部122は、この属性群を含むファイル操作通知(属性群、端末ID等)を生成し、通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS1718)。
〔同期状態表示〕(アイコン表示部/端末装置)
次に、図15に示した端末装置1におけるアイコン表示部123が、ファイル同期の状態表示を行う場合の処理について詳細に説明する。図19は、アイコン表示部123による処理(状態表示処理)を示すフローチャートであり、図16に示したステップS1602、ステップS1603及びステップS1607におけるアイコン表示処理に相当する。また、図20は、アイコンの表示例を示す図である。図20において、(1)〜(5)は、ファイル同期における個々のファイルの状態を示すマークであり、各マークは、フォルダのアイコンまたはファイルのアイコンの表示範囲内で、互いに重ならないように、所定位置に配置されている。例えば、マークは、画素毎の画素値及び配置座標から構成される。また、図20(6)の上段に示すように、アイコン表示部123は、フォルダのアイコンの画像と、(1)〜(5)のマークが所定位置に配置された画像とを合成し、マークを付加したアイコンとして画面表示する。マークが所定位置に配置された画像は、マーク以外の箇所が透過し、フォルダのアイコンの画像と合成される。また、図20(6)の中断に示すように、アイコン表示部123は、フォルダのアイコンに、そのフォルダに属するファイルの状態を示す全てのマークを付加して表示する。また、図20(6)の下段に示すように、アイコン表示部123は、フォルダに属する下位層のフォルダのアイコン毎に、そのフォルダに属するファイルの状態を示すマークを付加して表示する。アイコン表示部123は、このマークを上位のフォルダに伝搬させ表示する。つまり、アイコン表示部123は、ファイルが属するフォルダ、及びそのフォルダが属する上位のフォルダのアイコン(ファイルを基準にした場合、その上位階層のフォルダについての個々のアイコン)を表示する際に、そのファイルの状態を示すマークを、これらのアイコンに付加して表示する。
アイコン表示部123は、ファイルのアップロードが開始されたか否かを判定し(ステップS1901)、アップロードが開始されたと判定した場合(ステップS1901:Y)、アップロード中の状態を示す上矢印のマーク(図20(1)を参照)を、共有フォルダのアイコン等に付加して表示する(ステップS1902)。これにより、ユーザは、共有フォルダ等に上矢印のマークが付加されている場合、その共有フォルダ内のいずれかのファイルがアップロード中であることを認識することができる。一方、アイコン表示部123は、ステップS1901において、アップロードが開始されていないと判定した場合(ステップS1901:N)、ステップS1907へ移行する。尚、通信部11は、ファイルを、APIサーバ2を介してストレージサーバ3へアップロードしている状態を監視しており、アイコン表示部123は、通信部11から、ファイルのアップロード状態(開始、失敗及び完了)の情報を入力する。
アイコン表示部123は、ファイルのアップロードが失敗したか否かを判定し(ステップS1903)、アップロードに失敗したと判定した場合(ステップS1903:Y)、アップロードに失敗した状態を示す上矢印及び雨のマーク(図20(2)を参照)を、共有フォルダのアイコン等に付加して表示する(ステップS1904)。これにより、ユーザは、共有フォルダ等に上矢印及び雨のマークが付加されている場合、その共有フォルダ内のいずれかのファイルがアップロードに失敗したことを認識することができる。一方、アイコン表示部123は、ステップS1903において、アップロードに失敗していないと判定した場合(ステップS1903:N)、ステップS1905へ移行する。
アイコン表示部123は、ファイルのアップロードが完了したか否かを判定し(ステップS1905)、アップロードが完了したと判定した場合(ステップS1905:Y)、上矢印のマーク並びに上矢印及び雨のマークを、共有フォルダのアイコン等の表示から削除する(ステップS1906)。これにより、ユーザは、共有フォルダ内のいずれかのファイルのアップロードが完了したことを認識することができる。一方、アイコン表示部123は、ステップS1905において、アップロードが完了していないと判定した場合(ステップS1905:N)、ステップS1903へ移行する。
アイコン表示部123は、ステップS1901から移行して、ファイルのダウンロードが開始されたか否かを判定し(ステップS1907)、ダウンロードが開始されたと判定した場合(ステップS1907:Y)、ダウンロード中の状態を示す下矢印のマーク(図20(3)を参照)を、共有フォルダのアイコン等に付加して表示する(ステップS1908)。これにより、ユーザは、共有フォルダ等に下矢印のマークが付加されている場合、その共有フォルダにファイルがダウンロード中であることを認識することができる。一方、アイコン表示部123は、ステップS1907において、ダウンロードが開始されていないと判定した場合(ステップS1907:N)、ステップS1911へ移行する。尚、通信部11は、ファイルを、ストレージサーバ3からAPIサーバ2を介してダウンロードしている状態を監視しており、アイコン表示部123は、通信部11から、ファイルのダウンロード状態(開始及び完了)の情報を入力する。
アイコン表示部123は、ファイルのダウンロードが完了したか否かを判定し(ステップS1909)、ダウンロードが完了したと判定した場合(ステップS1909:Y)、下矢印のマーク等を、共有フォルダのアイコン等の表示から削除する(ステップS1910)。これにより、ユーザは、共有フォルダ内のいずれかのファイルのダウンロードが完了したことを認識することができる。一方、アイコン表示部123は、ステップS1909において、ダウンロードが完了していないと判定した場合(ステップS1909:N)、完了するまで待つ。
アイコン表示部123は、ステップS1907から移行して、通信部11がFIを受信したか否かを判定し(ステップS1911)、FIを受信したと判定した場合(ステップS1911:Y)、受信したFIと保持中の属性群(ファイル操作により生成された属性群)とを比較し、ファイル操作の種別を判定する(ステップS1912)。具体的には、アイコン表示部123は、受信したFIが、新たなユニークIDを含むFIである場合、他の端末装置1において「新規ファイル作成」または「ファイルコピー」のファイル操作が行われたと判断し、ファイル操作の種別を「新規ファイル作成」または「ファイルコピー」と判定する。また、アイコン表示部123は、受信したFIに含まれるユニークIDと同じ属性を有する保持中の属性群を特定し、ファイルサイズ及びハッシュ値が異なる場合、ファイル操作の種別を「ファイル更新」と判定し、ファイル名が異なる場合、ファイル操作の種別を「ファイル名変更」と判定し、ファイルパスが異なる場合、ファイル操作の種別を「ファイル移動」と判定する。
アイコン表示部123は、ステップS1912において、ファイル操作の種別を「新規ファイル作成」または「ファイルコピー」と判定した場合、「新規ファイル作成」または「ファイルコピー」のファイル操作が他の端末装置1において行われ、新たなファイルをダウンロードしていない状態を示す雲のマーク(図20(4)を参照)を、共有フォルダのアイコン等に付加して表示する(ステップS1913)。これにより、ユーザは、共有フォルダ等に雲のマークが付加されている場合、他の端末装置1によってストレージサーバ3の共有フォルダに新たなファイルが作成され、そのファイルが自らの端末装置1にダウンロードされていないことを認識することができる。
また、アイコン表示部123は、ステップS1912において、ファイル操作の種別を「ファイル更新」「ファイル名変更」または「ファイル移動」と判定した場合、「ファイル更新」「ファイル名変更」または「ファイル移動」のファイル操作が他の端末装置1において行われ、更新したファイル、名称を変更したファイルまたは移動したファイルをダウンロードしていない状態を示す雨のマーク(図20(5)を参照)を、共有フォルダのアイコン等に付加して表示する(ステップS1914)。これにより、ユーザは、共有フォルダ等に雨のマークが付加されている場合、他の端末装置1によってストレージサーバ3の共有フォルダ内のファイルが更新、移動され、またはファイル名が変更され、そのファイルが自らの端末装置1にダウンロードされておらず、古いファイルが自らの端末装置1に格納されていることを認識することができる。また、アイコン表示部123は、ステップS1913及びステップS1914において表示したマークを、そのマークに関連するファイルのダウンロードが完了したときに、ステップS1910において削除する。
以上のように、端末装置1におけるファイル処理部12のアイコン表示部123は、ファイルのアップロード、アップロードの失敗及びダウンロードの状態を示すマーク(上矢印のマーク、上矢印及び雨のマーク、下矢印のマーク)、「新規ファイル作成」または「ファイルコピー」が他の端末装置1にて行われ、新たなファイルをダウンロードしていない状態を示すマーク(雲のマーク)、及び、「ファイル更新」「ファイル名変更」または「ファイル移動」が他の端末装置1にて行われ、自らの端末装置1が古いファイルを保持していることを示すマーク(雨のマーク)を、それぞれの状態に応じてフォルダのアイコンに付加して表示するようにした。これにより、ユーザは、フォルダのアイコンに付加して表示されたマークから、自らの端末装置1が新たなファイルを保持していないこと、または、保持しているファイルが古いこと等を認識することができる。したがって、ユーザは、ファイル同期の処理がどのような状態にあるのかを、的確に認識することができる。また、アイコン表示部123は、ファイルの状態を示すマークを、そのフォルダの上位のフォルダのアイコンに伝搬表示するようにした。これにより、ユーザは、表示されているフォルダのアイコンから、その下位のフォルダ及びファイルの状態を認識することができる。
尚、アイコン表示部123は、ファイル同期の状態として、アップロード中の状態を示すマーク(図20(1))、アップロードの失敗の状態を示すマーク(図20(2))、ダウンロード中の状態を示すマーク(図20(3))、「新規ファイル作成」等の操作があったことを示すマーク(図20(4))及び「ファイル更新」等の操作があったことを示すマーク(図20(5))を、アイコンに付加して表示するようにした。これに対し、アイコン表示部123は、これらのファイルの状態を集約表示するようにしてもよい。具体的には、アイコン表示部123は、アップロード中の状態を示すマーク(図20(1))またはダウンロード中の状態を示すマーク(図20(3))を表示する際に、これらのマークの代わりに、ファイル同期の処理を行っている状態(同期中の状態)を示すマークを、アイコンに付加して表示する。また、アイコン表示部123は、アップロードの失敗の状態を示すマーク(図20(2))、「新規ファイル作成」等の操作があったことを示すマーク(図20(4))または「ファイル更新」等の操作があったことを示すマーク(図20(5))を表示する際に、これらのマークの代わりに、ファイル同期の処理が行われていない状態であることを示すマークを、アイコンに付加して表示する。また、アイコン表示部123は、ファイルの状態を示すマークをフォルダのアイコンに付加して表示するようにしたが、ファイルに付加して表示するようにしてもよい。
〔Webブラウザによるアクセス〕(通信部/端末装置)
次に、図15に示した端末装置1における通信部11及びファイル処理部12が、Webブラウザにより、HTTPに従ってAPIサーバ2を介してストレージサーバ3へアクセスする場合の処理について詳細に説明する。
図40は、ストレージサーバ3に備えたフォルダの階層構造の例を示す図である。図40に示すように、ストレージサーバ3はフォルダA〜Gを備えており、その構造は、フォルダB,CがフォルダAに属し、フォルダD,EがフォルダBに属し、フォルダF,GがフォルダCに属する関係になっている。フォルダA〜Gには、フォルダを一意に特定するためのユニークID1〜7が付与されている。いま、フォルダEが共有フォルダであり、ファイル「ddd.txt」がフォルダEに属し、複数のユーザによりアクセス可能であるとする。この場合、フォルダEのパス(フォルダパス)は、「/A/B/E」であり、ファイル「ddd.txt」のパス(ファイルパス)は、「/A/B/E/ddd.txt」である。
図41は、フォルダインデックスの構成を示す図である。このフォルダインデックスは、フォルダの属性を示す複数の情報から構成され、具体的には、ユニークID、フォルダサイズ、ハッシュ値、Eタグ、フォルダ名及びフォルダパスの各属性から構成される。1つのフォルダに対応して1つのフォルダインデックスが存在する。ユニークIDは、フォルダを一意に特定するための値であり、全てのフォルダ及び全てのファイルについて異なる値が付与される。つまり、図4に示したFIのユニークIDも含めて異なる値が付与される。フォルダサイズは、当該フォルダに属する全てのファイルの大きさを合計した値であり、ハッシュ値は、ハッシュ関数により得られた関数値である。Eタグは、フォルダが更新されたときに新たに付与される値である。フォルダ名は、フォルダの名称であり、フォルダパスは、当該フォルダの所在を示すアドレスである。これらの属性は、図4に示したFIの属性(ユニークID、ファイルサイズ、ハッシュ値、Eタグ、ファイル名、ファイルパス)に相当する。尚、フォルダが新たに作成された場合、新たなユニークID及びEタグが付与され、フォルダサイズ、フォルダ名等が変更された場合、新たなEタグが付与される。
図42は、図40に示したフォルダEのフォルダインデックスを示す図である。図42に示すように、フォルダEのフォルダインデックスは、ユニークID:5、フォルダサイズ:b、ハッシュ値:c、Eタグ:d、フォルダ名:E、及びフォルダパス:/A/B/Eの各属性から構成される。尚、フォルダインデックスは、ストレージサーバ3に格納されている。
ここで、端末装置1を使用するユーザの操作により、端末装置1が、Webブラウザにより、ストレージサーバ3に備えた共有フォルダEへアクセスする場合の処理を説明する。
端末装置1は、図42に示したフォルダEのフォルダインデックスをストレージサーバ3から取得しているものとする。端末装置1を使用するユーザが、フォルダEのURLとして「http://・・・.jp/5」を指定する。このURL「http://・・・.jp/5」は、プロトコルの種類「http」、ストレージサーバ3の名称(ホスト名)「・・・.jp」、及びフォルダEのユニークID「5」からなる。そうすると、端末装置1の通信部11は、Webブラウザにより、ユーザにより指定されたURLのうちのユニークID「5」を含むリクエストを生成し、HTTPに従ってAPIサーバ2へ送信する。
APIサーバ2は、端末装置1からHTTPに従ってリクエストを受信すると、リクエストからユニークID「5」を取得し、ストレージサーバ3へ送信する。ストレージサーバ3は、APIサーバ2からユニークID「5」を受信すると、そのユニークID「5」をキーにして全てのフォルダインデックス及びFIを検索し、ユニークID「5」を有するフォルダインデックスを特定し、特定したフォルダインデックスに含まれるパス「/A/B/E」(図42を参照)を読み出す。そして、ストレージサーバ3は、読み出したパスを用いてフォルダEにアクセスし、フォルダEに関する情報(例えば、フォルダEに属する全てのファイルのFI)を取得し、APIサーバ2を介して端末装置1へ送信する。
通信部11は、Webブラウザにより、APIサーバ2からフォルダEに関する情報を含むレスポンスを、HTTPに従って受信し、レスポンスを解析してフォルダEに関する情報を取得し、ファイル処理部12に出力する。そして、ファイル処理部12は、フォルダEに関する情報を入力し、画面表示等の処理を行う。
ここで、ユーザによりフォルダEのユニークIDがURLの一部として指定され、リクエストが送信される際に、Webブラウザにより、URL「http://・・・.jp/5」が画面に表示される。つまり、フォルダEのユニークID「5」は画面に表示されるが、ファイルパス「/A/B/E」は表示されない。
尚、前述の処理は、ファイルへアクセスする場合も同様である。端末装置1が、ファイル「ddd.txt」のFIをストレージサーバ3から取得しているものとする。端末装置1を使用するユーザが、ファイル「ddd.txt」のURLとして「http://・・・.jp/a」を指定する。「a」は、ファイル「ddd.txt」のユニークIDとする。そうすると、端末装置1の通信部11は、Webブラウザにより、ユーザにより指定されたURLのうちのユニークID「a」を含むリクエストを生成し、HTTPに従ってAPIサーバ2へ送信する。ここで、ユーザの指定によって、URL「http://・・・.jp/a」が画面に表示される。つまり、ファイル「ddd.txt」のユニークID「a」は画面に表示されるが、そのファイルパス「/A/B/E/ddd.txt」は表示されない。
以上のように、端末装置1の通信部11及びファイル処理部12は、ユーザにより、ファイル「ddd.txt」またはフォルダEのユニークID(「5」または「a」)を含むURLが指定されると、そのURLのうちのユニークIDを含むリクエストを生成し、HTTPに従ってAPIサーバ2へ送信するようにした。これにより、ユーザは、ファイルまたはフォルダのパス(「/A/B/E/ddd.txt」または「/A/B/E」)を含むURLを指定する必要がなく、ファイルまたはフォルダのパスが画面に表示されることもない。したがって、パス情報を確実に隠蔽することができ、他のユーザにパス情報を知られることがないから、セキュリティを確保することができる。
〔APIサーバ〕
次に、図1及び図2に示したAPIサーバ2について詳細に説明する。図23は、APIサーバ2の構成を示すブロック図である。このAPIサーバ2は、通信部21及び記憶部22を備えている。
通信部21は、所定のプロトコルを用いて端末装置1、ストレージサーバ3及びイベントサーバ4との間でデータの送受信を行う。通信部21は、端末装置1からファイル操作通知、及びFI取得要求を受信してストレージサーバ3へ送信する。また、通信部21は、ストレージサーバ3からFI及び更新通知を受信し、FIを端末装置1へ送信し、更新通知を記憶部22に格納すると共に、イベントサーバ4へ送信する。
さらに、通信部21は、端末装置1から更新情報取得要求(送信元の端末IDを含む)を受信し、更新情報取得要求に含まれる送信元の端末ID、記憶部22に格納されている更新通知に含まれる共有情報及び送信元端末IDに基づいて、更新通知に含まれる上位フォルダのパスを特定し、上位フォルダのパスを、更新情報取得要求を送信してきた送信元の端末IDを有する端末装置1へ送信する。
記憶部22には更新通知が格納される。更新通知は、通信部21により格納され、また、読み出される。尚、記憶部22には、ファイル操作時に、ストレージサーバ3により生成された更新通知が格納され、更新通知により更新有りの情報を受信した全ての端末装置1から送信された更新情報取得要求に対し、上位フォルダのパスが読み出された場合、その上位フォルダのパスを含む更新通知は、通信部21によって削除される。
図24は、記憶部22に格納された更新通知の構成を示す図である。前述のとおり、更新通知は、イベント種類(更新有り)、共有情報(ファイル操作が行われたファイルの属する共有フォルダへのアクセスが許容されているユーザID)、ファイル操作が行われたファイルの属する上位フォルダのパス、及び送信元端末ID(ファイル操作通知を送信してきた端末装置1の端末ID、すなわち、ファイル操作が行われた端末装置1の端末ID)により構成される。記憶部22には、APIサーバ2がストレージサーバ3から更新通知を受信する毎に、それぞれの更新通知が格納される。
次に、図23に示したAPIサーバ2の処理について説明する。図25は、APIサーバ2の処理を示すフローチャートである。APIサーバ2の通信部21は、ファイル操作が行われた端末装置1からファイル操作通知を受信したか否かを判定し(ステップS2501)、ファイル操作通知を受信したと判定した場合(ステップS2501:Y)、ファイル操作通知をストレージサーバ3へ送信する(ステップS2502)。一方、通信部21は、ステップS2501において、ファイル操作通知を受信していないと判定した場合(ステップS2501:N)、ステップS2503へ移行する。
通信部21は、ステップS2501から移行して、ストレージサーバ3からFIを受信したか否かを判定し(ステップS2503)、FIを受信したと判定した場合(ステップS2503:Y)、受信したFIを、FI取得要求を送信してきた端末装置1、またはファイル操作が行われた端末装置1へ送信する(ステップS2504)。一方、通信部21は、ステップS2503において、FIを受信していないと判定した場合(ステップS2503:N)、ステップS2505へ移行する。
通信部21は、ステップS2503から移行して、ストレージサーバ3から更新通知を受信したか否かを判定し(ステップS2505)、更新通知を受信したと判定した場合(ステップS2505:Y)、更新通知を記憶部22に格納する(ステップS2506)。また、通信部21は、受信した更新通知をイベントサーバ4へ送信する(ステップS2507)。一方、通信部21は、ステップS2505において、更新通知を受信していないと判定した場合(ステップS2505:N)、ステップS2508へ移行する。
通信部21は、ステップS2505から移行して、端末装置1から更新情報取得要求を受信したか否かを判定し(ステップS2508)、更新情報取得要求を受信したと判定した場合(ステップS2508:Y)、更新情報取得要求に含まれる送信元の端末ID、記憶部22に格納されている更新通知に含まれる共有情報(ユーザID)及び送信元端末ID(ファイル操作が行われた端末装置1の端末ID)に基づいて、更新通知に含まれる上位フォルダのパスを特定する(ステップS2509)。具体的には、通信部21は、記憶部22に格納されている更新通知に含まれる共有情報(ユーザID)から、そのユーザIDのユーザが使用している端末装置1の端末IDを、図示しない共有フォルダ情報(ストレージサーバ3に備えた後述する共有フォルダ情報と同じであり、ストレージサーバ3から取得される。この共有ファイル情報は、ストレージサーバ3の共有フォルダへアクセスしているユーザのユーザID及び端末装置1の端末IDが対になっている情報である。)から特定する。そして、通信部21は、更新通知毎に、共有情報に対応する複数の端末IDから、更新通知に含まれる送信元端末ID(ファイル操作が行われた端末装置1の端末ID)を除外し、残された端末IDと更新情報取得要求に含まれる送信元の端末IDとを比較する。そして、通信部21は、残された端末ID(ファイル操作を行っていない端末装置1の端末ID)に、送信元の端末ID(更新情報取得要求を送信してきた端末装置1の端末ID)が含まれる場合、その更新通知を更新情報取得要求に対応するものとして、その更新通知に含まれる上位フォルダのパスを特定する。
通信部21は、特定した上位フォルダのパスを、更新情報取得要求に含まれる送信元の端末IDを有する端末装置1へ送信する(ステップS2510)。
通信部21は、ステップS2508から移行して、端末装置1からFI取得要求を受信したか否かを判定し(ステップS2511)、FI取得要求を受信したと判定した場合(ステップS2511:Y)、FI取得要求をストレージサーバ3へ送信する(ステップS2512)。
APIサーバ2は、ステップS2502、ステップS2504、ステップS2507、ステップS2510、ステップS2512から移行すると、またはステップS2511においてFI取得要求を受信していないと判定した場合(ステップS2511:N)、処理を終了してステップS2501の処理を再度行う。
〔ストレージサーバ〕
次に、図1及び図2に示したストレージサーバ3について詳細に説明する。図26は、ストレージサーバ3の構成を示すブロック図である。このストレージサーバ3は、通信部31、同期制御部32及び記憶部33を備えている。
通信部31は、所定のプロトコルを用いてAPIサーバ2との間でデータの送受信を行う。通信部31は、端末装置1により送信されたファイル操作通知、FI取得要求及びユーザ選択種別をAPIサーバ2から受信し、同期制御部32に出力する。また、通信部31は、同期制御部32から更新通知、FI及びユーザ選択指令を入力し、APIサーバ2へ送信する。
同期制御部32は、操作種別特定部321、ファイル・FI処理部322、FI送信部323及び衝突処理部324を備えている。操作種別特定部321は、通信部31からファイル操作通知を入力し、ファイル操作通知に含まれるファイル操作種別データに基づいて、ファイル操作の種別(操作種別)を特定する。
ファイル・FI処理部322は、操作種別特定部321により特定された操作種別毎に、ファイル処理を行い、操作種別に応じてファイルを記憶部33に格納し、ファイル処理を行ったファイルについての新たなFIを生成して記憶部33に格納する。
FI送信部323は、ファイル・FI処理部322により生成された新たなFIを通信部31に出力する。また、FI送信部323は、イベント種類(更新有り)、ファイル・FI処理部322によりファイル処理されたファイルが属する上位フォルダのパス、この上位フォルダの共有情報(ユーザID)、ファイル操作通知を送信してきた端末装置1の端末ID(送信元端末ID)を含む更新通知を生成し、通信部31に出力する。また、FI送信部323は、通信部31からFI取得要求を入力し、FI取得要求に含まれる上位フォルダのパスに基づいて、その上位フォルダに属する全てのファイルのFIを記憶部33から読み出し、通信部31に出力する。
衝突処理部324は、操作種別特定部321が通信部31から入力した端末装置1からのファイル操作通知に含まれる属性群のEタグ、及び記憶部33から読み出したFIのEタグに基づいて、ファイル衝突の有無を判定し、ファイル衝突有りを判定した場合、ユーザ選択指令を通信部31に出力する。また、衝突処理部324は、通信部31からユーザ選択種別を入力し、ユーザ選択種別に応じた処理を行う。
記憶部33には、ファイル、ファイルについてのFI、共有フォルダ情報及び領域データファイルが格納されている。これらの情報は、同期制御部32により格納され、また、読み出される。
図27は、記憶部33に格納された共有フォルダ情報の構成を示す図である。共有フォルダ情報には、共有フォルダへアクセス可能なユーザに関する情報が定義されている。図27に示すように、共有フォルダ情報は、共有フォルダのパス、及びその共有フォルダへアクセス可能なユーザのユーザIDにより構成される。尚、記憶部33に格納された領域データファイルについては後述する。
次に、図26に示したストレージサーバ3の処理について説明する。図28は、ストレージサーバ3の処理を示すフローチャートである。ストレージサーバ3の通信部31は、端末装置1により送信されたファイル操作通知を受信すると、ファイル操作通知を同期制御部32の操作種別特定部321に出力し、操作種別特定部321は、ファイル操作通知に含まれるファイル操作種別データに基づいて、ファイル操作の種別を示す操作種別を特定する(ステップS2801)。前述のとおり、操作種別には、新規ファイル作成、ファイル更新、ファイル削除、ファイル名変更、ファイル移動及びファイルコピーがある。
衝突処理部324は、ファイル操作通知に含まれる属性群のEタグと、記憶部33から読み出した、ファイル操作通知に含まれる属性群と同一のユニークIDを有するFIのEタグとを比較し、ファイル衝突の有無を判定する(ステップS2802)。衝突処理部324は、Eタグが異なる場合、ファイル衝突有りを判定し(ステップS2803:有)、衝突処理を行う(ステップS2807)。一方、衝突処理部324は、Eタグが同じ場合、ファイル衝突無しを判定し(ステップS2803:無)、ステップS2804へ移行する。
ファイル・FI処理部322は、ステップS2803から移行して、ステップS2801において特定された操作種別に応じたファイル処理(例えば、新たなファイルを記憶部33に格納する処理、記憶部33からファイルを削除する処理等)を行う(ステップS2804)。そして、ファイル・FI処理部322は、ステップS2804においてファイル処理を行ったファイルについてのEタグ、更新日時等を付与し、新たなFIを生成し、記憶部33に格納する(ステップS2805)。そして、FI送信部323は、ステップS2805において生成された新たなFIを端末装置1へ送信するための処理を行う(ステップS2806)。
(操作種別特定部/ストレージサーバ)
次に、図26に示したストレージサーバ3における操作種別特定部321の処理について詳細に説明する。図29は、操作種別特定部321の処理を示すフローチャートであり、図28に示したステップS2801の処理に相当する。
操作種別特定部321は、端末装置1から送信されたファイル操作通知を通信部31から入力し(ステップS2901)、ファイル操作通知からファイル操作種別データを取得する(ステップS2902)。そして、操作種別特定部321は、ファイル操作種別データに基づいて、操作種別を特定する(ステップS2903〜ステップS2909)。
尚、操作種別特定部321は、ファイル操作通知に含まれる属性群等に基づいて、操作種別を特定するようにしてもよい。
図43は、操作種別特定部321の他の処理(ファイル操作通知に含まれる属性群等に基づいて操作種別を特定する処理)を示すフローチャートである。操作種別特定部321は、端末装置1から送信されたファイル操作通知を通信部31から入力し(ステップS4301)、ファイル操作通知から属性群を取得する(ステップS4302)。そして、操作種別特定部321は、属性群に含まれるユニークID、Eタグ及び更新日時にデータが存在しない(ヌルが設定されている)か否かを判定し(ステップS4303)、データが存在しないと判定した場合(ステップS4303:Y)、操作種別を「新規ファイル作成」に特定する(ステップS4304)。一方、操作種別特定部321は、ステップS4303において、ユニークID、Eタグ及び更新日時のいずれかにデータが存在すると判定した場合(ステップS4303:N)、ステップS4305へ移行する。
操作種別特定部321は、ステップS4303から移行して、属性群に含まれるユニークIDにデータが存在しない(ヌルが設定されている)か否かを判定し(ステップS4305)、データが存在しないと判定した場合(ステップS4305:Y)、操作種別を「ファイルコピー」に特定する(ステップS4306)。一方、操作種別特定部321は、ステップS4305において、ユニークIDにデータが存在すると判定した場合(ステップS4305:N)、ステップS4307へ移行する。
操作種別特定部321は、ステップS4305から移行して、属性群からユニークIDa(属性群にはユニークIDaが含まれるものとする。)を取得し、記憶部33からユニークIDaを有するFIを読み出す(ステップS4307)。記憶部33から読み出したFIの属性は、(ユニークIDa,ファイルサイズb,ハッシュ値c,Eタグd,ファイル名e,ファイルパスf,更新日時g)とする。つまり、端末装置1は、ストレージサーバ3の記憶部33に格納されたFIのファイルに対し、ユーザによりファイル操作が行われ、属性群を生成したことになる。
操作種別特定部321は、端末装置1からの属性群と記憶部33から読み出したFIとを比較し(ステップS4308)、操作種別を特定する。操作種別特定部321は、属性群に含まれるファイルサイズb1とFIに含まれるファイルサイズbとを比較すると共に、属性群に含まれるハッシュ値c1とFIに含まれるハッシュ値cとを比較し(ステップS4309)、2つの属性が異なると判定した場合(ステップS4309:Y)、操作種別を「ファイル更新」に特定する(ステップS4310)。一方、操作種別特定部321は、ステップS4309において、2つの属性が異なっていない(いずれかの属性または2つの属性が同じである)と判定した場合(ステップS4309:N)、ステップS4311へ移行する。
操作種別特定部321は、属性群に含まれる各属性a〜gとFIに含まれる各属性a〜gとをそれぞれ比較し(ステップS4311)、全ての属性が同じであると判定した場合(ステップS4311:Y)、操作種別を「ファイル削除」に特定する(ステップS4312)。一方、操作種別特定部321は、ステップS4311において、全ての属性が同じでない(いずれかの属性が異なっている)と判定した場合(ステップS4311:N)、ステップS4313へ移行する。
操作種別特定部321は、属性群に含まれるファイル名e1とFIに含まれるファイル名eとを比較し(ステップS4313)、ファイル名の属性が異なると判定した場合(ステップS4313:Y)、操作種別を「ファイル名変更」に特定する(ステップS4314)。一方、操作種別特定部321は、ステップS4313において、ファイル名の属性が異ならない(同じである)と判定した場合(ステップS4313:N)、ステップS4315へ移行する。
操作種別特定部321は、属性群に含まれるファイルパスf1とFIに含まれるファイルパスfとを比較し(ステップS4315)、ファイルパスの属性が異なると判定した場合(ステップS4315:Y)、操作種別を「ファイル移動」に特定する(ステップS4316)。
操作種別特定部321は、ステップS4304、ステップS4306、ステップS4310、ステップS4312、ステップS4314、ステップS4316から移行すると、または、ステップS4315においてファイルパスの属性が異ならない(同じである)と判定した場合(ステップS4315:N)、処理を終了してステップS4301の処理を再度行う。
(ファイル・FI処理部/ストレージサーバ)
次に、図26に示したストレージサーバ3におけるファイル・FI処理部322の処理について詳細に説明する。図30は、ファイル・FI処理部322の処理を示すフローチャートであり、図28に示したステップS2804及びステップS2805の処理に相当する。
ファイル・FI処理部322は、操作種別特定部321により特定された操作種別を判別する(ステップS3001)。前述のとおり、記憶部33から読み出されたFIをFI(a,b,c,d,e,f,g)とする。
操作種別が「新規ファイル作成」の場合、端末装置1からの属性群は、FI(−,b1,c1,−,e1,f1,−)である。この場合、ファイル・FI処理部322は、ファイル操作が行われた端末装置1から新たに作成されたファイルをアップロードし、その新たなファイルを記憶部33に格納する(ステップS3002)。そして、ファイル・FI処理部322は、Eタグd2及び更新日時g2を付与すると共に(ステップS3003)、記憶部33に格納したファイルを一意に特定するためのユニークIDa2を付与する(ステップS3004)。そして、ファイル・FI処理部322は、付与した属性及び属性群に含まれる属性から、記憶部33に格納したファイルについての新たなFI(a2,b1,c1,d2,e1,f1,g2)を生成し、記憶部33に格納する(ステップS3005)。
操作種別が「ファイル更新」の場合、端末装置1からの属性群は、FI(a,b1,c1,d,e,f,g)である。この場合、ファイル・FI処理部322は、ファイル操作が行われた端末装置1から更新されたファイルをアップロードし、元のファイル(属性群と同じユニークIDaのファイル)を記憶部33から削除すると共に、アップロードした更新ファイルを記憶部33に格納する(ステップS3006)。そして、ファイル・FI処理部322は、Eタグd2及び更新日時g2を付与し(ステップS3007)、付与した属性及び属性群に含まれる属性から、記憶部33に格納した更新ファイルについてのFI(a,b1,c1,d2,e,f,g2)を生成し、記憶部33に上書きする(ステップS3008)。すなわち、元のFI(a,b,c,d,e,f,g)に、生成したFI(a,b1,c1,d2,e,f,g2)を上書きする。
操作種別が「ファイル削除」の場合、端末装置1からの属性群は、FI(a,b,c,d,e,f,g)である。この場合、ファイル・FI処理部322は、ファイル(属性群と同じユニークIDaのファイル)を記憶部33から削除する(ステップS3009)。そして、ファイル・FI処理部322は、記憶部33から属性群と同じ属性を有するFIを削除する(ステップS3010)。
操作種別が「ファイル名変更」の場合、端末装置1からの属性群は、FI(a,b,c,d,e1,f,g)である。この場合、ファイル・FI処理部322は、Eタグd2及び更新日時g2を付与し(ステップS3011)、付与した属性及び属性群に含まれる属性から、FI(a,b,c,d2,e1,f,g2)を生成し、記憶部33に上書きする(ステップS3012)。すなわち、元のFI(a,b,c,d,e,f,g)に、生成したFI(a,b,c,d2,e1,f,g2)を上書きする。
操作種別が「ファイル移動」の場合、端末装置1からの属性群は、FI(a,b,c,d,e,f1,g)である。この場合、ファイル・FI処理部322は、Eタグd2及び更新日時g2を付与し(ステップS3013)、付与した属性及び属性群に含まれる属性から、FI(a,b,c,d2,e,f1,g2)を生成し、記憶部33に上書きする(ステップS3014)。すなわち、元のFI(a,b,c,d,e,f,g)に、生成したFI(a,b,c,d2,e,f1,g2)を上書きする。
操作種別が「ファイルコピー」の場合、端末装置1からの属性群は、FI(−,b,c,−,e,f1,−)である。この場合、ファイル・FI処理部322は、コピー元のファイルをコピーすることにより、新たなファイルとして記憶部33に格納する(ステップS3015)。尚、コピー元のファイルは、ファイル操作通知に含まれる、コピー元ファイルのユニークID(図示せず)に基づいて特定される。そして、ファイル・FI処理部322は、Eタグd2及び更新日時g2を付与すると共に(ステップS3016)、記憶部33に格納した新たなファイルを一意に特定するためのユニークIDa2を付与する(ステップS3017)。そして、ファイル・FI処理部322は、付与した属性及び属性群に含まれる属性から、記憶部33に格納した新たなファイルについての新たなFI(a2,b,c,d2,e,f1,g2)を生成し、記憶部33に格納する(ステップS3018)。
(FI送信部/ストレージサーバ)
次に、図26に示したストレージサーバ3におけるFI送信部323の処理について詳細に説明する。図31は、FI送信部323の処理を示すフローチャートであり、図28に示したステップS2806の処理に相当する。
FI送信部323は、ファイル・FI処理部322により生成されたFIを通信部31に出力する。このFIは、ファイル操作通知を送信してきた端末装置1へ、APIサーバ2を介して送信される(ステップS3101)。これにより、端末装置1は、ストレージサーバ3のファイル・FI処理部322により生成され記憶部33に格納されたFIと同じFIを保持することができる。
FI送信部323は、ファイル操作が行われたファイルが属する上位フォルダのパスを、ファイル・FI処理部322により生成されたFIに含まれるファイルパス(ファイル操作が行われたファイルの所在を示すファイルパス)に基づいて特定する(ステップS3102)。尚、操作種別が「ファイル移動」の場合、FI送信部323は、移動前のファイルが属する上位フォルダのパスも特定する。具体的には、ファイル・FI処理部322は、図30に示したステップS3014によるFIの上書き前に、ファイル操作通知に含まれる属性群と同じユニークIDaを有するFIを記憶部33から読み出し、FI送信部323は、ファイル・FI処理部322により読み出されたFIに含まれるファイルパスf(移動前のファイルの所在を示すファイルパス)を取得し、このファイルパスfに基づいて、移動前のファイルが属する上位フォルダのパスを特定する。
FI送信部323は、記憶部33から共有フォルダ情報を読み出し、ステップS3102において特定した上位フォルダのパスに対応するユーザIDを特定する(ステップS3103)。特定したユーザIDを共有情報とする。
FI送信部323は、イベント種類(更新有り)、ステップS3103において特定した共有情報(ユーザID)、ステップS3102において特定した上位フォルダのパス、及び、ファイル操作通知を送信してきた端末装置1の端末ID(送信元端末ID)を含む更新通知を生成する(ステップS3104)。これにより、図3に示したイベント通知シーケンスが行われる。
FI送信部323は、更新通知をAPIサーバ2へ送信する(ステップS3105)。そして、FI送信部323は、端末装置1(APIサーバ2を介してストレージサーバ3に接続されている端末装置1のうちのファイル操作通知を送信していない端末装置1、すなわち、更新通知に含まれる共有情報(ユーザID)のユーザが使用している端末装置1のうち、ファイル操作通知を送信していない端末装置1)からAPIサーバ2を介して受信したFI取得要求を、通信部31から入力する(ステップS3106)。
FI送信部323は、FI取得要求に含まれる上位フォルダのパスに基づいて、記憶部33に格納されているFIのファイルパスを参照し、その上位フォルダに属する全てのファイルのFIを記憶部33から読み出す(ステップS3107)。そして、FI送信部323は、FI取得要求の応答として、その上位フォルダに属する全てのファイルのFIを、APIサーバ2を介して端末装置1(ステップS3106においてFI取得要求を送信してきた端末装置1)へ送信する(ステップS3108)。これにより、FI取得要求を送信してきた端末装置1は、ストレージサーバ3の記憶部33に格納されたFIと同じFIを保持することができる。
〔衝突処理〕(衝突処理部/ストレージサーバ)
次に、図26に示したストレージサーバ3における衝突処理部324の処理について詳細に説明する。図32は、衝突処理部324の処理を示すフローチャートであり、図28に示したステップS2802、ステップS2803及びステップS2807の処理に相当する。また、衝突処理部324の処理に対応して、図16のステップS1612〜ステップS1614に示したように、端末装置1における通信部11及びファイル処理部12のファイル操作部121による処理が行われる。
ファイル衝突は、ストレージサーバ3で生成されたFIが端末装置1に反映されないまま、その端末装置1でファイル操作が行われたときに生じる。例えば、第1の端末装置1及び第2の端末装置1が、同一のファイルをダウンロードした後、第1の端末装置1がオンラインからオフラインへ変更され、第2の端末装置1が、ファイル更新の処理を行い、ストレージサーバ3が、このファイル更新に伴って、FI及びファイルを更新し、第1の端末装置1がオフラインからオンラインへ変更され、ファイル更新の処理を行った場合に、ストレージサーバ3においてファイル衝突が生じる。
図11、図12及び図13は、ファイル衝突時のシーケンスを説明する図である。端末装置1−1,1−2は、ストレージサーバ3から同一ファイルのFIを取得し、そのファイルをダウンロードすることにより、同一ファイルのFI及びファイルを保持しているものとする。ここで、FI(a,b,c,d,e,f,g)とする。以下、図11、図12及び図13のシーケンスを用いて、図32に示す衝突処理部324の処理について説明する。
端末装置1−1がオンラインからオフラインへ変更され、端末装置1−2において、ユーザによるファイル更新の操作が行われたとする。そうすると、端末装置1−2は、属性群(a,b1,c1,d,e,f,g)を生成し(図示せず)、この属性群を含むファイル操作通知を、ストレージサーバ3へ送信する。ストレージサーバ3における同期制御部32の操作種別特定部321は、端末装置1−2から受信したファイル操作通知を通信部31から入力し、図29に示した処理により、操作種別を「ファイル更新」に特定する。
衝突処理部324は、属性群に含まれるEタグdとFIに含まれるEタグdとを比較し(ステップS3201)、Eタグdが同じであると判定し(ステップS3201:Y)、ファイル衝突無しを判定する(ステップS3202)。そして、端末装置1−2から更新ファイルがアップロードされ、更新ファイルはファイルxとして記憶部33に格納される。また、ファイルxについてのFI(a,b1,c1,d2,e,f,g2)が生成され、記憶部33に格納され、端末装置1−2へ送信される。尚、端末装置1−1はオフラインであるから、更新通知による更新有りのイベントは端末装置1−1へ通知されない。このときには、端末装置1−2及びストレージサーバ3は、同一のFI(a,b1,c1,d2,e,f,g2)及びこのFIのファイルxを保持しており、端末装置1−1は、更新前のFI(a,b,c,d,e,f,g)及び更新前のファイルを保持していることになる。
端末装置1−1において、ユーザによるファイル更新の操作が行われ、端末装置1−1がオフラインからオンラインに変更されたとする。更新によってファイルyが生成され、属性群(a,b3,c3,d,e,f,g)が生成されたとする。そうすると、端末装置1−1は、この属性群(a,b3,c3,d,e,f,g)を含むファイル操作通知を、ストレージサーバ3へ送信する。ストレージサーバ3における同期制御部32の操作種別特定部321は、端末装置1−1から受信したファイル操作通知を通信部31から入力し、図29に示した処理により、操作種別を「ファイル更新」に特定する。
衝突処理部324は、属性群に含まれるEタグdとFIに含まれるEタグd2とを比較し(ステップS3201)、Eタグが異なると判定し(ステップS3201:N)、ファイル衝突有りを判定する(ステップS3203)。そして、衝突処理部324は、端末装置1−2における操作種別及び端末装置1−1における操作種別が共に「ファイル更新」であるか否かを判定する(ステップS3204)。本例の場合、端末装置1−1,1−2における操作種別が「ファイル更新」であると判定し(ステップS3204:Y)、すなわち、端末装置1−2によるファイル更新が行われた後、端末装置1−1によるファイル更新が行われ、ファイル衝突有りの状態になっていると判定し、ファイル更新時の衝突回避の処理を行う。衝突処理部324は、ユーザ選択指令を通信部31に出力する。このユーザ選択指令は、APIサーバ2を介して、ファイル操作通知を送信してきた端末装置1−1へ送信される(ステップS3205)。これにより、端末装置1−1は、ユーザ選択指令を受信し、図16のステップS1613に示すように、ユーザによる「新規ファイル保存」「強制上書き」「破棄して最新取得」「キャンセル」の選択により、ユーザ選択種別を、APIサーバ2を介してストレージサーバ3へ送信する。
衝突処理部324は、端末装置1−1から受信したユーザ選択種別を通信部31から入力し、ユーザ選択種別を判別する(ステップS3206、ステップS3207)。図12(1)に示すように、衝突処理部324は、ユーザ選択種別「新規ファイル保存」を判別した場合、端末装置1−1からファイルyをアップロードし、新たなファイルとして記憶部33に格納する(ステップS3208)。そして、衝突処理部324は、Eタグd4及び更新日時g4を付与し(ステップS3209)、ファイルyを特定するためのユニークIDa4を付与すると共にファイル名e4も付与する(ステップS3210)。そして、衝突処理部324は、新たなFI(1)であるFI(a4,b3,c3,d4,e4、f,g4)を生成し、記憶部33に格納する(ステップS3211)。そして、衝突処理部324は、新たなFI(1)及び端末装置1−2により更新されたファイルxのFIを、ファイル操作通知を送信してきた端末装置1−1へ送信する(ステップS3212)。また、衝突処理部324は、図3に示したイベント通知シーケンスにより、FI(1)及びFIを端末装置1−2へ送信する。
このように、ストレージサーバ3の衝突処理部324は、端末装置1−1,1−2のファイル更新により、ファイル衝突有りを判定した場合、先に更新したファイルxに加えて後に更新したファイルyも記憶部33に格納し、FI及びFI(1)を端末装置1−1,1−2へ送信するようにした。これにより、端末装置1−1,1−2及びストレージサーバ3は、先に更新したファイルxのFI及び後に更新したファイルyのFI(1)をそれぞれ保持することができ、ファイル同期を確立することができる。つまり、ファイル同期システム10は、同一のファイルを更新して生成した異なるファイルx,yを管理することができ、ユーザは、端末装置1−1にて更新されたファイルy及び端末装置1−2にて更新されたファイルxを見失うことがない。
図12(2)に示すように、衝突処理部324は、ユーザ選択種別「強制上書き」を判別した場合、端末装置1−1からファイルyをアップロードし、元のファイルを記憶部33から削除し、アップロードしたファイルyを新たなファイルとして記憶部33に格納する(ステップS3213)。そして、衝突処理部324は、Eタグd4及び更新日時g4を付与し(ステップS3214)、FI(a,b3,c3,d4,e,f,g4)を生成し、記憶部33に上書きする(ステップS3215)。そして、衝突処理部324は、生成したFIを、ファイル操作通知を送信してきた端末装置1−1へ送信する(ステップS3212)。また、衝突処理部324は、図3に示したイベント通知シーケンスにより、生成したFIを端末装置1−2へ送信する。
このように、ストレージサーバ3の衝突処理部324は、端末装置1−1,1−2のファイル更新により、ファイル衝突有りを判定した場合、先に更新したファイルxを記憶部33から削除し、後に更新したファイルyを記憶部33に格納し、ファイルyのFIを端末装置1−1,1−2へ送信するようにした。これにより、端末装置1−1,1−2及びストレージサーバ3は、後に更新したファイルyのFIをそれぞれ保持することができ、ファイル同期を確立することができる。つまり、ファイル同期システム10は、後に更新したファイルyを管理することができる。
図13(3)に示すように、衝突処理部324は、ユーザ選択種別「破棄して最新取得」を判別した場合、ファイルxのFI(a,b1,c1,d2,e,f,g2)を、ファイル操作通知を送信してきた端末装置1−1へ送信する(ステップS3212)。
このように、ストレージサーバ3の衝突処理部324は、端末装置1−1,1−2のファイル更新により、ファイル衝突有りを判定した場合、先に更新したファイルxのFIを端末装置1−1へ送信するようにした。これにより、端末装置1−1,1−2及びストレージサーバ3は、先に更新したファイルxのFIをそれぞれ保持することができ、ファイル同期を確立することができる。つまり、ファイル同期システム10は、先に更新したファイルxを管理することができる。
図13(4)に示すように、衝突処理部324は、ユーザ選択種別「キャンセル」を判別した場合、処理を行うことなく図32に示した処理を終了する。
このように、ストレージサーバ3の衝突処理部324は、端末装置1−1,1−2のファイル更新により、ファイル衝突有りを判定した場合、処理を行わないようにした。これにより、端末装置1−2及びストレージサーバ3は、先に更新したファイルxのFIをそれぞれ保持することができ、ファイル同期を確立することができる。また、端末装置1−1は、ファイル操作通知を送信した際のファイルy及びFI(a,b3,c3,d,e,f,g)をそのままの状態で保持する。
以上のように、ストレージサーバ3における同期制御部32の衝突処理部324によれば、受信したファイル操作通知の属性群に含まれるEタグと、ストレージサーバ3の記憶部33にて保持しているFIに含まれるEタグとを比較し、Eタグが異なる場合にファイル衝突有りを判定し、先に更新したファイルxに加えて、後に更新したファイルyを記憶部33に格納し、ファイルxについてのFI及びファイルyについてのFI(1)を端末装置1へ送信するようにした。これにより、ファイル衝突の調整が確実に行われ、端末装置1及びストレージサーバ3は、同一のFIを保持することができるから、ファイル同期を確立することができ、ユーザは、ファイル衝突に伴ってファイルを見失うことがない。つまり、先にファイル操作をした端末装置1−2、及び後にファイル操作をした端末装置1−1において、自らの端末装置1において更新したファイルがストレージサーバ3に格納されると共に、他の端末装置1において更新されたファイルもストレージサーバ3に格納されるから、ファイル衝突が解消され、個々の端末装置1−1,1−2を操作するユーザは、ファイルを見失うことがない。前述のように、端末装置1−2がストレージサーバ3に接続され、端末装置1−1がストレージサーバ3に接続されていない場合において、端末装置1−2におけるファイル更新に伴ってストレージサーバ3にて生成されたFIと、後に端末装置1−1がストレージサーバ3に接続された場合の、端末装置1−1におけるファイル更新に伴ってストレージサーバ3へ送信された属性群とが比較され、ファイル衝突有りが判定される。そして、ストレージサーバ3において、2つのFI,FI(1)及び2つのファイルx,yが格納される。これにより、ファイル衝突が解消され、個々の端末装置1−1,1−2を操作するユーザは、ファイルを見失うことがない。
また、衝突処理部324は、ステップS3204において、端末装置1−1,1−2における操作種別が「ファイル更新」でないと判定した場合(ステップS3204:N)、他の操作に伴う衝突回避の処理を行う(ステップS3216)。例えば、図11に示した端末装置1−1,1−2において、端末装置1−1,1−2における操作が共に「ファイル移動」の場合や、端末装置1−2による先の操作が「ファイル移動」であり端末装置1−1による後の操作が「ファイル更新」の場合や、端末装置1−2による先の操作が「ファイル名変更」であり端末装置1−1による後の操作が「ファイル名変更」の場合や、端末装置1−2による先の操作が「ファイル削除」であり端末装置1−1による後の操作が「ファイル更新」の場合についても、先にファイル操作をした端末装置1−2、及び後にファイル操作をした端末装置1−1において、自らの端末装置1において更新したファイルがストレージサーバ3に格納されると共に、他の端末装置1において更新されたファイルもストレージサーバ3に格納される。尚、このとき、端末装置1−1,1−2における操作種別が「ファイル更新」の場合と同様に、衝突処理部324は、ユーザ選択指令を端末装置1−1へ送信し、ユーザによる選択を受け付けるようにしても良い。
〔ファイルを分割した領域毎のファイル更新〕
次に、ファイルをアップロードする際に、ファイルを所定サイズに分割した領域毎に行うファイル更新の処理について説明する。図14は、領域毎にファイル更新を行う場合のシーケンスを説明する図である。
(領域毎のファイル更新/ファイル操作部/端末装置)
まず、図14を参照して、端末装置1におけるファイル処理部12の処理について説明する。図22は、端末装置1のファイル処理部12による領域毎にファイル更新を行う場合の処理を示すフローチャートである。ストレージサーバ3の記憶部33には、所定ファイル及びそのファイルのFI(a,b,c(1),・・・,c(5),d,e,f,g)が格納されているものとする。ハッシュ値c(1),・・・,c(5)は、所定ファイルを所定サイズに分割した領域における領域データに対応した値である。
端末装置1−2におけるファイル処理部12のファイル操作部121は、ストレージサーバ3から所定ファイルのFI(a,b,c(1),・・・,c(5),d,e,f,g)を取得し、そのファイルをダウンロードし(ステップS2201)、ファイルを所定サイズに分割した領域の番号(領域番号1,・・・,5)毎のハッシュ値c(1),・・・,c(5)及び領域データを記憶部13の領域データファイルに格納する(ステップS2202)。
図21は、端末装置1の記憶部13に格納された領域データファイルの構成を示す図である。図21に示すように、領域データファイルは、領域番号毎のハッシュ値及び領域データにより構成される。
ここで、ユーザによりファイル更新の操作が行われ、ファイルのうちの領域番号3の領域データのみが更新されたとする(ステップS2203:Y)。そうすると、ファイル操作部121は、更新された領域番号3の領域データについてハッシュ値c1(3)を付与し、領域番号3に対応してハッシュ値c1(3)及び更新された領域データを記憶部13の領域データファイルに格納する(ステップS2204)。
属性処理部122は、ファイルサイズb1を付与し(ステップS2205)、記憶部13の領域データファイルからハッシュ値c(1),c(2),c1(3),c(4),c(5)を読み出し(ステップS2206)、属性群(a,b1,c(1),c(2),c1(3),c(4),c(5),d,e,f,g)を生成する(ステップS2207)。
属性処理部122は、ステップS2207において生成した属性群及び端末装置1−2の端末ID(PC−B)を含むファイル操作通知を通信部11に出力する。このファイル操作通知は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS2208)。これにより、ストレージサーバ3は、ファイル操作通知を受信し、操作種別を「ファイル更新」に特定し、領域データが更新された領域番号3を特定し、領域番号3を含む領域データ送信指令を、APIサーバ2を介して端末装置1−2へ送信する。
ファイル操作部121は、ストレージサーバ3からAPIサーバ2を介して受信した領域データ送信指令を通信部11から入力し(ステップS2209)、記憶部13の領域データファイルから、領域データ送信指令に含まれる領域番号3のハッシュ値c1(3)及び領域データを読み出し(ステップS2210)、領域番号3、ハッシュ値c1(3)及び領域データを含む領域データ応答を生成し、通信部11に出力する。この領域データ応答は、APIサーバ2を介してストレージサーバ3へ送信される(ステップS2211)。これにより、ストレージサーバ3は、領域データ応答を受信し、領域データを統合して記憶部33に格納し、通常のファイル更新の処理を行う。詳細については後述する。
(領域毎のファイル更新/ファイル・FI処理部/ストレージサーバ)
次に、図14を参照してストレージサーバ3におけるファイル・FI処理部322の処理について説明する。図34は、ストレージサーバ3のファイル・FI処理部322による領域毎にファイル更新を行う場合の処理を示すフローチャートである。
図33は、ストレージサーバ3の記憶部33に格納された領域データファイルの構成を示す図である。図33に示すように、領域データファイルは、ファイルを特定するためのユニークID毎に構成され、領域番号毎のハッシュ値及び領域データからなる。記憶部33には、ユニークIDaのファイルについて、領域番号毎のハッシュ値c(1),・・・,c(5)及び領域データが格納されているものとする。
ストレージサーバ3における同期制御部32の操作種別特定部321により、端末装置1−2から受信したファイル操作通知に基づいて操作種別が「ファイル更新」に特定されると(ステップS3401:Y)、ファイル・FI処理部322は、ファイル操作通知に含まれる属性群のハッシュ値と、ストレージサーバ3の記憶部33に格納されたユニークIDが同じFIのハッシュ値とを比較し、異なるハッシュ値c1(3)を選出して領域番号3を特定する(ステップS3402)。
ファイル・FI処理部322は、領域番号3を含む領域データ送信指令を生成し、通信部31に出力する。この領域データ送信指令は、APIサーバ2を介して、ファイル操作通知を送信してきた端末装置1−2へ送信される(ステップS3403)。これにより、端末装置1−2は、前述のとおり、記憶部13の領域データファイルから、領域データ送信指令に含まれる領域番号3のハッシュ値c1(3)及び領域データを読み出し、領域番号3、ハッシュ値c1(3)及び領域データを含む領域データ応答をストレージサーバ3へ送信する。
ファイル・FI処理部322は、端末装置1−2から受信した領域データ応答を通信部31から入力し(ステップS3404)、記憶部33の領域データファイルに、領域データ応答に含まれる領域番号3に対応して、領域データファイルに含まれるハッシュ値c1(3)及び領域データを格納する(ステップS3405)。
ファイル・FI処理部322は、ファイル操作通知に含まれる属性群のハッシュ値のうち、ストレージサーバ3の記憶部33に格納されたユニークIDが同じFIに含まれる同じハッシュ値c(1),c(2),c(4),c(5)について、領域番号1,2,4,5を特定し、記憶部33の領域データファイルから、領域番号1,2,4,5の領域データを読み出す(ステップS3406)。
ファイル・FI処理部322は、受信した領域データ応答に含まれる領域番号3の領域データと、ステップS3406において読み出した領域番号1,2,4,5の領域データとを統合し(ステップS3407)、元のファイルを記憶部33から削除し、統合したファイルを記憶部33に格納する(ステップS3408)。このステップS3408の処理は、図30に示したステップS3006の処理に相当する。そして、ファイル・FI処理部322は、Eタグd2等を付与してFIを生成する等の処理を行う(ステップS3409)。このステップS3409の処理は、図30に示したステップS3007及びステップS3008の処理に相当する。
以上のように、端末装置1におけるファイル処理部12のファイル操作部121及び属性処理部122、並びにストレージサーバ3における同期制御部32のファイル・FI処理部322によれば、ファイルを所定サイズに分割した領域毎のハッシュ値及び領域データを含む領域データファイルを格納し、属性群及びFIに含まれるハッシュ値を領域毎のハッシュ値として扱うようにした。そして、端末装置1におけるファイル処理部12のファイル操作部121は、ストレージサーバ3から受信した領域データ送信指令に含まれる領域番号に従って、更新された領域データのみをストレージサーバ3へ送信するようにした。これにより、ファイルを構成する全データを送信する必要がないから、送信データ量を低減することができ、送信処理速度の向上を図ることができる。また、通信が中断した後再開した場合、ファイルを構成する全データを送信する必要がなく、更新された領域の領域データのみを送信すれば済むから、処理の効率化を図ることができる。
また、新規ファイルを端末装置1からストレージサーバ3へアップロードしているときにエラーが発生し、アップロードが完了しなかった場合には、端末装置1は、エラーが解除された後に、アップロードがされていない領域データのみを引き続きストレージサーバ3へアップロードすればよい。これにより、送信データ量の低減及び送信処理速度の向上を図ることができ、アップロードの処理の効率化を図ることができる。
尚、前述した領域毎のファイル更新処理は、ファイルをアップロードする場合の処理であるが、ファイルをダウンロードする場合にも適用がある。すなわち、端末装置1は、ストレージサーバ3から受信したFIに含まれるハッシュ値及び端末装置1に格納されているFIに含まれるハッシュ値を比較し、更新された領域番号を特定し、その領域番号を含む領域データ送信指令をストレージサーバ3へ送信する。そして、ストレージサーバ3は、端末装置1から受信した領域データ送信指令に含まれる領域番号に従って、更新された領域データを記憶部33から読み出し、その領域データを含む領域データ応答を端末装置1へ送信する。
〔イベントサーバ〕
次に、図1及び図2に示したイベントサーバ4について詳細に説明する。図35は、イベントサーバ4の構成を示すブロック図である。このイベントサーバ4は、通信部41及び記憶部42を備えている。
通信部41は、所定のプロトコルを用いてAPIサーバ2とコネクションサーバ5との間でデータの送受信を行う。通信部41は、コネクションサーバ5が管理している、ファイル同期システム10のネットワーク6にログインしている接続情報(ユーザID及び端末ID)を受信し、記憶部42に格納する。また、通信部41は、APIサーバ2から更新通知を受信し、記憶部42から接続情報を読み出し、更新通知に含まれる共有情報(ユーザID)及び送信元端末ID(ファイル操作が行われた端末装置1の端末ID)、並びに接続情報(ユーザID及び端末ID)に基づいて、更新有りのイベントを通知する端末装置1の端末IDを特定し、通知先の端末IDを含む更新指令をコネクションサーバ5へ送信する。
記憶部42には、接続情報が格納されている。接続情報は通信部41により格納され、また、読み出される。接続情報は、前述のとおり、コネクションサーバ5により管理される情報であり、端末装置1が、ユーザによりファイル同期システム10を構成するネットワーク6へログインした場合に、ログインしたユーザ及び接続された端末装置1に関するユーザID及び端末IDからなる情報である。すなわち、ユーザが使用している端末装置1に関するユーザID及び端末IDが対になったユーザ固有情報である。
図36は、記憶部42に格納された接続情報の構成を示す図である。前述のとおり、接続情報は、ユーザID及び端末IDが対になったユーザ固有情報であり、例えば、ユーザID:A及び端末ID:PC−Aの対情報、ユーザID:B及び端末ID:PC−Bの対情報である。図36に示した接続情報の例では、ファイル同期システム10のネットワーク6に、端末ID:PC−Aを有する端末装置1がユーザID:Aによりログインして接続されており、端末ID:PC−Bを有する端末装置1がユーザID:Bによりログインして接続されていることを示している。
次に、図35に示したイベントサーバ4の処理について説明する。図37は、イベントサーバ4の処理を示すフローチャートである。イベントサーバ4の通信部41は、コネクションサーバ5から接続情報を受信したか否かを判定し(ステップS3701)、接続情報を受信したと判定した場合(ステップS3701:Y)、接続情報を記憶部42に格納する(ステップS3702)。一方、通信部41は、ステップS3701において、接続情報を受信していないと判定した場合(ステップS3701:N)、ステップS3703へ移行する。
通信部41は、ステップS3701から移行して、APIサーバ2から更新通知を受信したか否かを判定し(ステップS3703)、更新通知を受信したと判定した場合(ステップS3703:Y)、記憶部42から接続情報を読み出し、更新通知に含まれる共有情報(ユーザID)及び送信元端末ID(ファイル操作が行われた端末装置1の端末ID)、並びに接続情報に基づいて、更新有りのイベントを通知する端末装置1の端末IDを特定する(ステップS3704)。具体的には、通信部41は、接続情報(ユーザID及び端末ID)に基づいて、共有情報のユーザIDに対応する端末IDを特定し、特定した端末IDのうちの送信元端末ID(ファイル操作が行われた端末装置1の端末ID)以外の端末ID(APIサーバ2を介してストレージサーバ3に接続されている他の端末装置1)を、更新有りのイベントを通知する端末装置1の端末ID、すなわち通知先の端末IDとして特定する。
通信部41は、通知先の端末IDを含む更新指令をコネクションサーバ5へ出力する(ステップS3705)。
イベントサーバ4は、ステップS3702、ステップS3705から移行すると、またはステップS3703において更新通知を受信していないと判定した場合(ステップS3703:N)、処理を終了してステップS3701の処理を再度行う。
〔コネクションサーバ〕
次に、図1及び図2に示したイベントサーバ5について詳細に説明する。図38は、コネクションサーバ5の構成を示すブロック図である。このコネクションサーバ5は、通信部51及び接続管理部52を備えている。
通信部51は、所定のプロトコルを用いて端末装置1とイベントサーバ4との間でデータの送受信を行う。通信部51は、端末装置1からログイン情報(ユーザID及び端末ID)を受信して接続管理部52に出力し、接続管理部52から接続情報(ユーザID及び端末ID)を入力してイベントサーバ4へ送信する。また、通信部51は、イベントサーバ4から更新指令を受信し、更新指令に含まれる通知先の端末IDの端末装置1へ更新有りの情報を送信する。
接続管理部52は、通信部51からログイン情報を入力し、接続情報として管理し、接続情報を通信部51に出力する。
次に、図38に示したコネクションサーバ5の処理について説明する。図39は、コネクションサーバ5の処理を示すフローチャートである。コネクションサーバ5の通信部51は、端末装置1からログイン情報を受信したか否かを判定し(ステップS3901)、ログイン情報を受信したと判定した場合(ステップS3901:Y)、ログイン情報を接続管理部52に出力する。そして、接続管理部52は、通信部51からログイン情報を入力し、接続情報として管理し(ステップS3902)、接続情報を通信部51に出力する。通信部51は、接続管理部52から接続情報を入力し、イベントサーバ4へ送信する(ステップS3903)。一方、通信部51は、ステップS3901において、ログイン情報を受信していないと判定した場合(ステップS3901:N)、ステップS3904へ移行する。
通信部51は、ステップS3901から移行して、イベントサーバ4から更新指令を受信したか否かを判定し(ステップS3904)、更新指令を受信したと判定した場合(ステップS3904:Y)、更新指令に含まれる通知先の端末IDの端末装置1へ、更新有りの情報を送信する(ステップS3905)。
コネクションサーバ5は、ステップS3903、ステップS3905から移行すると、またはステップS3904において更新指令を受信していないと判定した場合(ステップS3904:N)、処理を終了してステップS3901の処理を再度行う。
以上のように、本発明の実施形態によるファイル同期システム10によれば、端末装置1におけるファイル処理部12のファイル操作部121及び属性処理部122、並びにストレージサーバ3における同期制御部32のファイル・FI処理部322は、ファイルを所定サイズに分割した領域毎のハッシュ値及び領域データを含む領域データファイルを格納し、属性群及びFIに含まれるハッシュ値を領域毎のハッシュ値として扱うようにした。そして、端末装置1におけるファイル処理部12のファイル操作部121は、ストレージサーバ3から受信した領域データ送信指令に含まれる領域番号に従って、更新された領域データのみをストレージサーバ3へ送信するようにした。これにより、ファイルを構成する全データを送信する必要がないから、送信データ量を低減することができ、送信処理速度の向上を図ることができる。
以上、実施形態を挙げて本発明を説明したが、本発明は前記実施形態に限定されるものではなく、その技術思想を逸脱しない範囲で種々変形可能である。例えば、図2に示した例では、端末装置1−1は、APIサーバ2から上位フォルダのパスを受信し、上位フォルダのパスを含むFI取得要求を送信するようにした。これに対し、端末装置1−1は、上位フォルダのパスの代わりに、上位フォルダ内の共有ファイルのユニークIDを受信し、そのユニークIDを含むFI取得要求を送信するようにしてもよい。また、図1及び図2に示したファイル同期システム10において、イベントサーバ4及びコネクションサーバ5の機能をストレージサーバ3に持たせるようにしてもよい。この場合、ファイル同期システム10は、端末装置1、受信装置2及びストレージサーバ3により構成される。
尚、本発明の実施形態によるファイル同期システム10の端末装置1、APIサーバ2、ストレージサーバ3、イベントサーバ4及びコネクションサーバ5のハードウェア構成としては、通常のコンピュータを使用することができる。これらの装置は、CPU、RAM等の揮発性の記憶媒体、ROM等の不揮発性の記憶媒体、及びインターフェース等を備えたコンピュータによって構成される。端末装置1に備えた通信部11及びファイル処理部12、APIサーバ2に備えた通信部21、ストレージサーバ3に備えた通信部31及び同期制御部32、イベントサーバ4に備えた通信部41、及びコネクションサーバ5に備えた通信部51の各機能は、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。また、これらのプログラムは、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスク等)、光ディスク(CD−ROM、DVD等)、半導体メモリ等の記憶媒体に格納して頒布することもできる。