アップロード
次はサーバにドキュメントをアップロードしましょう。
現在アップロードできるドキュメントの種類は以下となっています。それ以外の拡張子のドキュメントをアップロードしようとするとエラーとなります。
| 種類 | 拡張子 |
| 文書 | .html, .txt, .doc, .rtf, .odt, .sxw |
| スプレッドシート | .csv, .xls, .ods |
| プレゼンテーション | .ppt, .pps |
以下がドキュメントアップロードに関するサンプルコートです。
echo "<a href=\"" . $_SERVER['SCRIPT_NAME'] . "?menu=upload\">ドキュメントアップロード</a><br />";//【1】
// 各メニューリンク押下時の処理振り分け
if(isset($_GET['menu'])) {
switch ($_GET['menu']) {
case 'upload': //【2】
// アップロード用フォーム表示
print <<<HTML
<h2>ドキュメントアップロード</h2>
<form method="post" enctype="multipart/form-data">
<input type="file" name="upfile" />
<input type="submit" name="upload" value="実行" />
<input type="submit" name="cancel" value="キャンセル" />
</form>
HTML;
break;
// アップロードボタン押下時動作
if(isset($_POST['upload'])) { //【3】
$filename = $_FILES["upfile"]["name"];
$location = $_FILES["upfile"]["tmp_name"];
uploadDocument($serviceDocs, $filename, $location);
}
// メソッド:アップロード処理
function uploadDocument($serviceDocs, $filename, $location) { //【4】
// アップロードする
try {
$serviceDocs->uploadFile(
$location,
urlencode($filename),
null,
Zend_Gdata_Docs::DOCUMENTS_LIST_FEED_URI);
} catch (Zend_Gdata_App_Exception $e) {
echo "エラー: " . $e->getMessage();
return;
}
echo "【" . $filename . "】をアップロードしました。
";
// ドキュメント一覧表示メソッド呼び出し
showAllDocuments($serviceDocs);
}
1. ドキュメントアップロードリンク
表示と同様に、自身のURLにパラメータ「upload」を与えたリンクを作成します。
2. リンクメニューの振り分け
1.のリンクからパラメータを取得し、「upload」であった場合、アップロード用のフォームを表示します。
3. アップロード情報の取得
2.のフォームより、アップロードするファイルのファイル名と、一時的にApacheサーバに保存されているファイルそのものを取得します。
4. アップロード処理メソッド
3.で取得した情報から実際にファイルのアップロードを行います。アップロードにはZend_Gdata_DocsオブジェクトのuploadFileメソッドを使用します。
Zend_Gdata_Docs_DocumentListEntry uploadFile($fileLocation, $title=null, $mimeType=null, $uri=null)
このメソッドは戻り値として、アップロードを行ったドキュメントをZend_Gdata_Docs_DocumentListEntryオブジェクトとして返します。引数については以下のとおりです。
| 引数名 | 型 | 省略値 | 内容 |
| fileLocation | string | - | アップロードすべきドキュメントのパス。 |
| title | string | null | ドキュメントのサーバ上での名前。省略時はfileLocationのものが使用される。 |
| mimeType | string | null | ドキュメントのMIME-TYPE。省略時は拡張子から判断される。 |
| uri | string | null | アップロード先。省略時はhttp://docs.google.com/feeds/documents/private/fullとなる。 |
また、今回のサンプルでは第2引数のファイル名部分で日本語のタイトルのドキュメントも扱えるようにurlencodeメソッドを使用しています。このメソッドを使用することで「明日やること.txt」というファイル名が「%E6%98%8E%E6%97%A5%E3%82%84%E3%82%8B%E3%81%93%E3%81%A8.txt」という形に変更されて、アップロードできるようになります。

