当前位置: 首页 > 知识库问答 >
问题:

如何使用Amazonka获取签名的put对象url

酆君墨
2023-03-14

我试图得到一个预签名的网址把一个对象到我的s3桶。我知道桶配置很好,因为我已经在节点上使用过很多次了,没有任何问题。我目前正试图将我的上传endpoint转换为haskellendpoint作为个人项目。

我已经尝试使用amazonka来egt这个,但是我一直从AWS收到错误消息,我还没有找到一个关于如何实现这一点的好教程。我收到的错误消息如下:

您试图访问的存储桶必须使用指定的endpoint寻址。请将所有未来请求发送到此终结点。

我收到一个包含以下内容的url:https://s3.amazonaws.com/(我的桶名)

所以我把它改成这样:https://(my-bake-name)。s3.us-east-2.amazonaws.com在修复了上面问题的前缀后,我得到了以下结果:

解析X-Amz-Credential参数时出错;“美国东部1号”地区是错误的;期待“美国东部2号”

但是,我正在设置密钥、访问密钥和存储桶。

以下是一个可复制的示例:

module Lib
    ( main
    ) where

import ClassyPrelude
import           Network.AWS.S3
import           Network.AWS.S3.PutObject
import           Control.Monad.Trans.AWS
import           Network.AWS.Data
import           Control.Lens

bNameE :: BucketName
bNameE = BucketName <my-bucket-name>

oKeyE :: ObjectKey
oKeyE = ObjectKey ("101/12345-12345-12345-12345.jpg")
-- oKeyE = ObjectKey "photo-106399.jpeg"

sKeyE :: Text
sKeyE = <my-bucket-secret>

aKeyE :: Text
aKeyE = <my-bucket-public>

main :: IO ()
main = do
  r <- getPresignedURL Ohio bNameE oKeyE
  print r

getPresignedURL :: Region
                -> BucketName
                -> ObjectKey
                -> IO ByteString
getPresignedURL r b k = do
    lgr <- newLogger Trace stdout
    env <- newEnv $ FromKeys (AccessKey $ encodeUtf8 $ aKeyE) (SecretKey $ encodeUtf8 $ sKeyE)
    ts  <- getCurrentTime
    let p = (putObject b k "") -- & poContentType .~ (Just "Content-Type=image/jpeg")
    print p
    runResourceT . runAWST env $
        presignURL ts 900 p --(poContentType (Lens'  (Just "Content-Type=jpeg")))

共有1个答案

暴奕
2023-03-14

问题的原因是没有在Env变量内设置区域,您可以使用以下内容生成签名URL:

getPresignedURL :: Region
                -> BucketName
                -> ObjectKey
                -> IO ByteString
getPresignedURL r b k = do
    lgr <- newLogger Trace stdout
    env <- newEnv $ FromKeys (AccessKey $ encodeUtf8 $ aKeyE) (SecretKey $ encodeUtf8 $ sKeyE)
    let nEnv = env & envRegion .~ r
    ts  <- getCurrentTime 
    runResourceT . runAWST nEnv $ presignURL ts 900 (putObject b k "Content-Type=image/jpeg")

我对镜头不是很熟悉,所以我相信有一种更简洁的方法可以做到以下几点:

    env <- newEnv $ FromKeys (AccessKey $ encodeUtf8 $ aKeyE) (SecretKey $ encodeUtf8 $ sKeyE)
    let nEnv = env & envRegion .~ r
 类似资料:
  • 问题内容: 像这样,A a = new A(),如何获得a的名称?(从a中获得字符串“ a”)? 有一个JPanel包含一些JTextField,一个映射包含所有JTextField的名称(变量的名称)。我想将地图的值设置为JTextFields的文本。 跨过getName()方法,我得到了null -_-我知道getName()方法不用于获取变量名。我正在使用netbeans进行Java swi

  • 问题内容: 我有三个这样的表: 电影:身份证,姓名 标签:ID,名称,值 已标记:id,电影(FK),标签(FK) 因此,每部电影都有自己的标签集。我需要的是基于标签集检索相似的电影。我想说10部按匹配标签计数排序的电影。 如果我创建如下所示的视图,它将使MySQL消失。“标记”表和“标记”表中都有超过30k条记录。 问题答案: 这将返回所有电影的列表,这些电影通过减少共同的标签数量来与给定顺序共

  • 我有一个场景,我需要用iText7库从pdf中获取签名信息。签名可能存在,也可能不存在。当我为没有任何数字签名的PDF实例化一个新的对象时,会出现异常 “没有相关的PdfWriter用于进行间接操作。” .如果有签名,就很好用。我不确定如何纠正这个异常。 更新为包含代码示例

  • 问题内容: 我正在使用object标签在html页面中加载html代码段。 我的代码遵循以下原则: 如预期的那样,页面加载后,在对象标记之间添加了一些元素。我想获取这些元素,但似乎无法访问它们。 我尝试了以下 这些似乎都不起作用。有没有其他方法可以获取这些元素? 编辑: 更详细的示例: 考虑这个 如果我尝试在对象中获取html,则会得到一个空字符串。 问题答案: 只要将其放在同一域上,就可以执行以

  • 我用的是swapi。在Spring Boot中获取应用程序数据的dev API。我需要用一个行星的名字来获取它的信息。因此,我使用下一个url:https://swapi.dev/api/planets/?search=Tatooine.JSON结果如下所示: 现在,在Java中,我使用服务中的下一个代码: 我只需要得到结果的数组,但是,我如何从对象得到结果的数组?

  • 我在做一个数独游戏,我有“cell”类型的9x9对象(类扩展了JTextField),我想防止在用户不符合游戏规则的情况下关注其他JTextField对象——他的输入(1-9)不会在同一行或同一个“块”。要做到这一点,我需要知道他关注的具体对象。 我正在考虑这样做的一种方法是使用DocumentFilter。我已经将输入过滤为数字和1长度,但我不知道如何获取他关注的“单元格”对象,我很确定Docu