您将如何从应用引擎servlet提供Google云端存储文件?

时间:2012-05-10 08:17:16

标签: google-app-engine java-ee google-cloud-storage

用户上传了一些我存储在Google云端存储中的文件。现在用户回来了,想要从我的应用程序显示的列表中下载文件。他/她单击链接并调用servlet。这个servlet背后的代码是什么样的? 此外,我不想公开对象。 我的样子如何: 有更简单的方法吗? 感谢。

public class ServeGSObject extends HttpServlet {
    FileService fileService = FileServiceFactory.getFileService();
    public void doGet(HttpServletRequest request, HttpServletResponse response){
        String fullFilePath = request.getParameter("objectPath");
        AppEngineFile file = new AppEngineFile(fullFilePath);
        try {
            FileReadChannel channel = fileService.openReadChannel(file, false);
            BufferedInputStream bis = new BufferedInputStream(Channels.newInputStream(channel));
            BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
            response.setHeader("Content-Disposition", "inline;filename=\"" + file.getNamePart() + "");
            int b = 0;
            while((b = bis.read()) != -1) {
                bos.write(b);
            }
            bos.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用blobstoreService.createGsBlobKey

生成与您的Google存储文件相对应的临时blobKey

使用blobstoreService.serve(blobKey, res)将其作为常规blobstore文件提供 https://developers.google.com/appengine/docs/java/blobstore/overview#Serving_a_Blob