语境
我的应用程序允许用户使用 createUploadUrl() 模式通过 Google App Engine 将 .mp4 文件上传到 Google Cloud Storage。上传工作正常,我能够在处理程序中获取相应的 FileInfo 对象。我正在使用适用于 Java 的 App Engine SDK 1.8.2。
挑战
我需要从 .mp4 文件中获取“持续时间”属性并将其存储在我的数据库中,但 FileInfo 对象不提供对此元数据的访问。我对如何执行此操作有一些想法(我已在下面列出),但考虑到我正在处理的项目有几个遗留依赖项,这些想法都不是很简单。
我很想听听你对如何解决这个问题的任何想法或建议(如果你有任何成功的故事,最好是!)
想法
- 我知道有像 ffmpeg 和 mdls(对于 mac)这样的脚本和实用程序可以从文件中读取元数据,但我的理解是这些将无法在 Google App Engine 中运行,我需要启动单独的进程使用类似谷歌计算引擎的东西。
- 我可以创建一个自定义 Flash 上传控件,当用户选择要上传的文件并通过标准表单提交将其传递时,它会读取持续时间逻辑。
- 我还知道有一个 Google Cloud Storage JSON API 现在处于 Beta 阶段。我没有看到任何可以让我从 .mp4 文件中读取“持续时间”属性的功能,但我可能会遗漏一些东西......
代码
HTML 表单
<form name="myForm" id="myForm" action="<%=createUploadUrl("/upload, uploadOptions)%>" method="POST" enctype="multipart/form-data">
<input type="file" name="uploadFileControl" id="uploadFileControl" value="Select...">
<input type="submit" value="Submit">
</form>
服务器端处理程序
DAO dao = new DAO();
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
Map<String, List<FileInfo>> fileInfos = blobstoreService.getFileInfos(req);
List<FileInfo> uploadedFile = fileInfos.get("uploadFileControl");
if(uploadedFile != null) {
FileInfo file = uploadedFile.get(0);
String fileName = file.getFilename();
}