Google App Engineにアップロードされたmp3ファイルからid3タグを読み取ることができるソリューションを見つけるために、数週間探していました。アップロードされたファイルはBlobstoreに保存されており、Javaでコーディングしています。
2つのタスクについて支援をお願いしたいと思います。
- 最も一般的なオーディオファイル形式からid3情報を読み取ることができるライブラリまたはメソッドにアクセスしたいと思います。これを実行できるいくつかのライブラリを試しましたが、それらはすべて、GAEでサポートされていないjava.io.Fileへのアクセスを必要とします。したがって、フレーム/タグは、メモリまたは他のGAEでサポートされているアクセス方法から読み取る必要があります。
- もう一度blobstoreにアクセスするのではなく、doPostメソッドからバイトを取得する方法を知りたいです。
以下は私が完成させたいコードです:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(req);
List<BlobKey> blobKeys = blobs.get("aud-file");
BlobKey fileKey = blobKeys.get(0);
BlobInfo info = blobInfoFactory.loadBlobInfo(fileKey);
String filename = info.getFilename();
long size = info.getSize();
Date created = info.getCreation();
String key = info.getBlobKey().getKeyString();
// TODO: Get mp3 file that was just uploaded and retrieve ID3 tag
// info.
SimpleDateFormat formatter = new SimpleDateFormat();
formatter.applyPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
StringBuilder builder = new StringBuilder();
builder.append("<?xml version=\"1.0\" ?>");
builder.append("<file name=\"" + filename + "\" ");
builder.append("size=\"" + Long.toString(size) + "\" ");
builder.append("created=\""
+ formatter.format(created).toString() + "\" ");
builder.append("key=\"" + key + "\">");
// TODO: append Title, Artist, and Duration of audio file for
// response to client side code
builder.append("</file>");
resp.setStatus(HttpServletResponse.SC_OK);
resp.setContentType("text/html;charset=\"utf-8\"");
PrintWriter writer = resp.getWriter();
writer.write(builder.toString());
writer.flush();
writer.close();
}
上記のコードは機能しており、アップロードされたファイルから情報を取得したい人にとっては良いパターンのようです。(Eclipseでローカルでテストする場合は、必ずbindAddressフラグをローカルマシン名に設定し、ホストと同じ名前をGWT Developer Pluginオプションに追加してください。)このリクエストについて、ご協力いただきありがとうございます。
クリス