【问题标题】:Spring AWS S3: How to upload an image and get a URL which shows it rather than downloads it?Spring AWS S3:如何上传图像并获取显示它而不是下载它的 URL?
【发布时间】:2015-11-10 11:54:30
【问题描述】:

所以我的问题是,当我打开上传文件的 URL 时,它会下载它。 我做了一些研究,问题是我应该以某种方式向 S3 指定它的图像。 目前这是处理上传的函数,但我不知道如何在那里设置类型。 或者是否有一个内置功能可以识别图像并在打开 URL 时自动显示它们而不是下载它们?

谢谢

public void writeResource(byte[] bytes, String fileName) throws IOException
{    
   Resource resource = this.resourceLoader.getResource("s3://bucket/" + fileName);
   WritableResource writableResource = (WritableResource) resource;
   try (OutputStream outputStream = writableResource.getOutputStream())
   {
      outputStream.write(bytes);
   }
}

【问题讨论】:

    标签: java spring amazon-web-services amazon-s3 spring-cloud


    【解决方案1】:
     @Autowired
     private AmazonS3 amazonS3;    
    
     ObjectMetadata meta = new ObjectMetadata();
                           meta.setContentType(file.getContentType());
                           meta.setContentLength(file.getSize());
                           meta.setHeader("filename", fileName);
    
     ByteArrayInputStream bis = new ByteArrayInputStream(file.getBytes());
    
     TransferManager transferManager = new TransferManager(this.amazonS3);
                     transferManager.upload(bucket, filename, bis, meta);
    

    我就是这样解决的。希望这对某人有所帮助。 :)

    【讨论】:

      【解决方案2】:

      大概您正在将此数据发送回浏览器(?)。如果要将文件的内容发送回浏览器,则需要设置响应的 content-type 以向浏览器表明该文件是图像;为此,您需要将内容类型设置为 "image/jpeg"

      通过指定内容类型,浏览器就知道如何处理文件(在这种情况下,在浏览器中呈现图像)。

      【讨论】:

      • 是的,这正是我需要做的,但不知道该怎么做。如何以编程方式设置?
      • 根据您在问题中剪断的代码,很难回答这个问题。该代码从什么/在哪里运行?在典型的基于 servlet 的 web 应用程序中,您将写入 Response 对象,而不是像您正在做的那样写入 OutputStream。写入 Response 对象时,您可以设置内容类型。例如:docs.oracle.com/javaee/6/api/javax/servlet/…
      猜你喜欢
      • 2014-02-27
      • 1970-01-01
      • 1970-01-01
      • 2021-05-03
      • 2019-06-17
      • 2021-04-02
      • 2018-02-03
      • 1970-01-01
      • 2021-01-19
      相关资源
      最近更新 更多