Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Google App Engine在服务器端读取ID3标签_Java_Google App Engine_Gwt_Mp3_Id3 - Fatal编程技术网

Java 使用Google App Engine在服务器端读取ID3标签

Java 使用Google App Engine在服务器端读取ID3标签,java,google-app-engine,gwt,mp3,id3,Java,Google App Engine,Gwt,Mp3,Id3,我已经搜索了几个星期,想找到一个解决方案,可以让我从上传到谷歌应用程序引擎的mp3文件中读取id3标签。上传的文件存储在Blobstore中,我正在用Java编码 我想请求协助完成两项任务: 我想有一个库或方法,可以读取最流行的音频文件格式的id3信息访问。我已经尝试过一些库可以做到这一点,但它们都需要访问java.io.File,而GAE不支持这一点。因此,必须从内存或其他GAE支持的访问方法中读取帧/标记 我想知道如何从doPost方法获取字节,而不是再次访问blobstore 以下是我希望

我已经搜索了几个星期,想找到一个解决方案,可以让我从上传到谷歌应用程序引擎的mp3文件中读取id3标签。上传的文件存储在Blobstore中,我正在用Java编码

我想请求协助完成两项任务:

  • 我想有一个库或方法,可以读取最流行的音频文件格式的id3信息访问。我已经尝试过一些库可以做到这一点,但它们都需要访问java.io.File,而GAE不支持这一点。因此,必须从内存或其他GAE支持的访问方法中读取帧/标记
  • 我想知道如何从doPost方法获取字节,而不是再次访问blobstore 以下是我希望完成的代码:

    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();
    }
    
    protectedvoiddopost(HttpServletRequest-req、HttpServletResponse-resp)
    抛出ServletException、IOException{
    Map blobs=blobstoreService.getUploads(req);
    List blobKeys=blobs.get(“aud文件”);
    BlobKey fileKey=blobKeys.get(0);
    BlobInfo info=blobInfoFactory.loadBlobInfo(fileKey);
    字符串filename=info.getFilename();
    long size=info.getSize();
    创建日期=info.getCreation();
    String key=info.getBlobKey().getKeyString();
    //TODO:获取刚刚上传的mp3文件并检索ID3标签
    //信息。
    SimpleDataFormat格式化程序=新的SimpleDataFormat();
    格式化程序.applyPattern(“yyyy-MM-dd'HH:MM:ss.SSSZ”);
    StringBuilder=新的StringBuilder();
    生成器。追加(“”);
    生成器。追加(“”);
    //TODO:为添加音频文件的标题、艺术家和持续时间
    //对客户端代码的响应
    生成器。追加(“”);
    分别设置状态(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插件选项中。)提前感谢您对此请求的帮助


    Chris

    使用blobstore和createUploadUrl上载文件后,数据已经在blobstore中,您只能使用blobstore API访问数据。

    您可以尝试使用。唯一的问题是它需要一个可读的
    java.io.File


    要使此工作正常,您可以尝试使用。使用它的一个例子是。

    使用GAE存储任何类型的较大文件都不是一个好主意。 根据这一点,请求/响应时间以及可传输的数据量都有硬限制:

    • 响应必须在60秒内返回(假设您有一个大文件并且连接速度慢,这可能是一个问题)
    • 请求最大为1MB(不是舒尔的)
    • 响应的最大大小可以是32 MB
    • 此外,我认为blob存储中有1MB的条目限制(因此,即使您设法在那里获取文件,您也必须将文件拆分为多个条目)

    我认为如果你在那里做一些实际工作之前做一些测试就好了。

    使用blobstore有什么问题吗?嗨,Shay,我正在使用blobstore。我的问题是,我正在尝试从文件中读取id3数据。嗨,Peter,这可能需要一点时间来验证,但我会尝试一下,看看它是否有效。我一定会记录我的结果。