从Rails后端直接上载AWS S3将导致S3存储桶项具有十六进制名称且没有文件扩展名

问题描述

任何人在S3上都遇到这个问题,即您从rails后端存储的文件不显示为您在attach方法中指定的文件名吗?例如:

    book.epub.attach(io: File.open("<filepath>/tangrenjie.epub"),filename: "rangrenjie.epub",content_type: 'application/epub+zip')

这会导致文件在S3上的名称为“ qsqyksxtpq66uk6vvyn6mtam17cp”:

here's a screenshot of what the bucket looks like; the bucket is public and all the links download when you click each one,but anything requiring a src url doesn't work

我在S3控制台上手动上传一个文件,实际上一切正常。它的名称没有更改,这使我认为这是从Rails到S3的问题。

我尝试在S3上添加到CORS标签;但我不确定自那以后该怎么办

  1. rails发送凭据,文件确实到达S3和
  2. 我认为本地主机不算是一个

这不会有问题,但是我使用的依赖项需要一个公共网址-我在S3上手动上传文件的网址可以正常工作,但是我的rails应用程序中的所有内容最终都会得到一个巨型密钥作为它的文件名,没有任何文件扩展名(请参见屏幕截图),当我在应用程序中将其用作src url时,它们将不起作用。

我已经浏览过https://edgeguides.rubyonrails.org/active_storage_overview.html#s3-service-amazon-s3-and-s3-compatible-apis之类的指南

我一直在从我使用的依赖项的作者那里获得帮助,但是他不知道,因为他有一段时间没有使用S3了。

这是我在S3中拥有的当前CORS规则:

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
    </CORSRule>
</CORSConfiguration>

我将Rails 6.0.3用作带有ActiveStorage的api和AWS S3服务,使用aws-sdk-s3 gem,使用root用户凭据在Rails后端应用程序上存储与对象关联的文件

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...