2

Google App Engineにアップロードされたmp3ファイルからid3タグを読み取ることができるソリューションを見つけるために、数週間探していました。アップロードされたファイルはBlobstoreに保存されており、Javaでコーディングしています。

2つのタスクについて支援をお願いしたいと思います。

  1. 最も一般的なオーディオファイル形式からid3情報を読み取ることができるライブラリまたはメソッドにアクセスしたいと思います。これを実行できるいくつかのライブラリを試しましたが、それらはすべて、GAEでサポートされていないjava.io.Fileへのアクセスを必要とします。したがって、フレーム/タグは、メモリまたは他のGAEでサポートされているアクセス方法から読み取る必要があります。
  2. もう一度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オプションに追加してください。)このリクエストについて、ご協力いただきありがとうございます。

クリス

4

3 に答える 3

1

Jaudiotaggerを使用してみることができます。唯一の問題は、読み取り可能なjava.io.File.

これを機能させるにはFile、 GAE のラッパーを使用してみてください。使用例はこちらです。

于 2012-07-30T16:54:27.657 に答える
0

blobstoreとcreateUploadUrlを使用してファイルをアップロードすると、データはすでにblobstoreにあり、blobstoreAPIを使用してのみアクセスできます。

于 2012-07-30T16:30:49.453 に答える
0

あらゆる種類の大きなファイルの保存に GAE を使用することは、あまり良い考えではありません。このwiki 記事によると、要求/応答時間と、転送できるデータ量には厳しい制限があります。

  • 応答は 60 秒以内に返される必要があります (ファイルが大きく、接続が遅いと仮定すると、これが問題になる可能性があります)
  • リクエストは最大 1MB まで可能です (これについては保証しません)
  • 応答は最大 32 MB 大きくなる可能性があります
  • また、ブロブ ストアのエントリには 1 MB の制限があると思います (したがって、そこにファイルを取得できたとしても、ファイルを複数のエントリに分割する必要があります)。

そこで実際の作業を行う前に、いくつかのテストを行うだけでよいと思います。

于 2012-11-27T12:35:56.623 に答える