有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

AmazonS3如何在浏览器中使用JavaWeb服务返回图像或文件

我用Java编写了一个web服务GET。我正在传递S3存储桶中存在的对象(图像)的名称。当我在浏览器中运行GET url时,我需要查看来自s3 bucket的图像/文件。但是,我只能返回S3URL。所以这就是我在浏览器中得到的。当我在浏览器中调用Java web服务时,我需要实际显示图像或下载文件,就像在浏览器中点击S3对象Url下载一样。但在我们的例子中,这需要通过JavaWeb服务实现。我该怎么做。下面是我正在尝试的

`@RequestMapping(value ="/getImage", method = RequestMethod.GET)
@ResponseStatus(HttpStatus.OK)
@ResponseBody     
public URL getImage (String inputfile) 
{ 
      AppLogger.info("BlitlineController:createThumbnail:begin");
      ObtainSignedUrl s3Url = new ObtainSignedUrl();
         URL s3url=  s3Url.getSrcSignedUrl(inputfile);
         return s3url;
 }`

共 (1) 个答案

  1. # 1 楼答案

    根据浏览器url的可用性,基本上有两种方法

    选项1

    如果浏览器可以访问S3中图像的url,客户端可以处理重定向,则适用:

    尝试发送“重定向”,以便浏览器能够自行理解这是一个重定向(具有特殊响应状态)。UI端将理解这一点(浏览器应该自动完成),并将直接向S3创建http请求

    下面是一个这样做的示例:

    @RequestMapping(value = "/getImage", method = RequestMethod.GET)
    public void getImage(HttpServletResponse httpServletResponse) {
        s3Url = calculateUrl and convert to string (maybe with encoding)
        httpServletResponse.setHeader("Location", s3Url);
        httpServletResponse.setStatus(302);
    }
    

    选项2

    当浏览器无法访问s3存储桶时,此选项适用。 你应该用s3 sdk连接AWS,获取图像并发送

    总而言之:

    我认为你应该更喜欢第一种选择