仕事でAzure Filesを使うことになり、JavaのWebアプリからアクセスする要件があり、ファイル作成、削除などの基本的な操作をAzure Java SDKでできるか確認した。
基本的には、以下のMicrosoft公式の実装サンプルを試してみた。
https://docs.microsoft.com/ja-jp/azure/storage/files/storage-java-how-to-use-file-storage?tabs=java
ほとんどそのまま使えるものであったが、以下のファイルアップロードだけそのままでは使えなかった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
public static Boolean uploadFile(String connectStr, String shareName, String dirName, String fileName) { try { ShareDirectoryClient dirClient = new ShareFileClientBuilder() .connectionString(connectStr).shareName(shareName) .resourcePath(dirName) .buildDirectoryClient(); ShareFileClient fileClient = dirClient.getFileClient(fileName); fileClient.create(1024); fileClient.uploadFromFile(fileName); return true; } catch (Exception e) { System.out.println("uploadFile exception: " + e.getMessage()); return false; } } |
「fileClient.create(1024)」と書かれているが、ここはファイルの最大サイズを指定するらしく、このままでは1KBのファイルまでしかアップロードできなかった。以下のように修正して、事前にファイルサイズを指定するよう変更した。(21行目)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/** * ファイルアップロード. * * @param connectStr 接続文字列 * @param shareName ファイル共有名 * @param dirName ディレクトリ名 * @param fileName ファイル名 * @param localFilePath アップロードファイルパス * @return Boolean 実行結果 */ public static Boolean uploadFile(String connectStr, String shareName, String dirName, String fileName, String localFilePath) { try { ShareDirectoryClient dirClient = new ShareFileClientBuilder().connectionString(connectStr) .shareName(shareName).resourcePath(dirName).buildDirectoryClient(); ShareFileClient fileClient = dirClient.getFileClient(fileName); File file = new File(localFilePath); fileClient.create(file.length()); fileClient.uploadFromFile(localFilePath); return true; } catch (Exception e) { System.out.println("uploadFile exception: " + e.getMessage()); return false; } } |
ソース全体は以下のGithubリポジトリにアップロード済み。
https://github.com/glasses-se-hub/azure-files-java-sdk
自分で作りたくないので、もうちょっと公式に実装サンプルがあるとうれしい。( º﹃º` )ダラ~