Java 获取文件持续时间Google App云存储服务器
我正在谷歌云存储mp3文件,我想知道这些文件的持续时间。 我曾尝试过这样做,但不知何故它不起作用:Java 获取文件持续时间Google App云存储服务器,java,google-app-engine,servlets,mp3,google-cloud-storage,Java,Google App Engine,Servlets,Mp3,Google Cloud Storage,我正在谷歌云存储mp3文件,我想知道这些文件的持续时间。 我曾尝试过这样做,但不知何故它不起作用: ListResult lr = gcsService.list(mybucketname, ListOptions.DEFAULT); while (lr.hasNext() && playlistLength > 0) { ListItem li = lr.next(); String filename = "/gs/mybucke
ListResult lr = gcsService.list(mybucketname, ListOptions.DEFAULT);
while (lr.hasNext() && playlistLength > 0) {
ListItem li = lr.next();
String filename = "/gs/mybucketname/" + li.getName();
AppEngineFile readableFile = new AppEngineFile(filename);
String st = readableFile.getFullPath();
File file = new File(st);
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(file);
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
}
AudioFormat format = audioInputStream.getFormat();
long frames = audioInputStream.getFrameLength();
double durationInSeconds = (frames+0.0) / format.getFrameRate();
playlistLength-=(int)(durationInSeconds)/60;
}
}
此代码可能会起到以下作用:
String filename = li.getName();
GcsService gcsService =
GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance());
GcsInputChannel readChannel = gcsService.openPrefetchingReadChannel(new GcsFilename(mybucketName, fileName), 0, 1024 * 1024);
AudioInputStream audioInputStream;
try (InputStream in = Channels.newInputStream(readChannel)) {
audioInputStream = AudioSystem.getAudioInputStream(in);
}
但是正如我们在评论中发现的,Appengine不支持AudioSystem
类、整个包javax.sound
的问题
另请看文档:
AppEngineFile
已经过时,不推荐使用,并且不确定这几天是否还能工作。从这个路径创建文件
很可能是无用的(我没有尝试过)。你为什么要这样做?你看过官方文件了吗?哦……那么你知道另一种获取文件路径或执行我尝试执行的操作的方法吗?@davidmoshko我刚刚注意到你没有接受Igor的答案。如果你在你的应用程序中使用了他的代码,那么你应该接受他的答案(点击它旁边的空复选标记),如果你有代表的话,请向上投票:)(如果这是你想要的答案,我自己对你的另一个问题的答案也是如此:))谢谢,但这不起作用:试试(InputStream in=Channels.newInputStream)(readChannel)){audioInputStream=AudioSystem.getAudioInputStream(in);}我不知道。我看不到堆栈跟踪中有错误,但这一行使我的应用程序崩溃,因此它不再执行她需要执行的操作。你需要查看stacktrace,如果没有此类信息,就无法猜测。例如,你可以在谷歌云控制台中执行。这一行来自官方文档,这是我运行stacktrace时的外观应用程序。我能从中推断出什么?这意味着你不能使用此类类,请参阅appengine上允许的类列表: