Java 使用Google App Engine在服务器端读取ID3标签
我已经搜索了几个星期,想找到一个解决方案,可以让我从上传到谷歌应用程序引擎的mp3文件中读取id3标签。上传的文件存储在Blobstore中,我正在用Java编码 我想请求协助完成两项任务: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 以下是我希望
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,这可能需要一点时间来验证,但我会尝试一下,看看它是否有效。我一定会记录我的结果。