Что такое полезная нагрузка запроса?

#html #amazon-s3 #payload

#HTML #amazon-s3 #полезная нагрузка

Вопрос:

Я пытаюсь загрузить загруженный файл из html-формы в aws s3, и у меня проблемы с подписанием запроса. Для первой части запроса мне нужно объединить некоторые значения вместе, чтобы получилась строка «CanonicalRequest»:

 CanonicalRequest =
  HTTPRequestMethod   'n'  
  CanonicalURI   'n'  
  CanonicalQueryString   'n'  
  CanonicalHeaders   'n'  
  SignedHeaders   'n'  
  HexEncode(Hash(RequestPayload))
  

Это то, что у меня есть на данный момент:

 let CanonicalRequest = "Post"   'n'  
          "/"   'n'  
          ""   'n'  
          "content-type:application/x-www-form-urlencoded; charset=utf-8n host:s3.amazonaws.comn; x-amz-date:"   Time3   "n"   'n'  
          "content-type;host;x-amz-date"   'n'  
  

Я думаю, что пока это правильно, но я могу быть совершенно неправ. Я понятия не имею, что такое «RequestPayload». Единственное, что я нашел, предполагает, что это тело html, но это включало бы форму и, следовательно, саму подпись, так что это не работает. Кто-нибудь понимает, что это такое и как я могу заставить это работать?

Ответ №1:

Похоже, вы используете сложный способ загрузки вашего файла… AWS предоставляет библиотеку для простого взаимодействия с S3

 const AWS = require('aws-sdk')
const S3 = new AWS.S3()
  

Затем вы можете вызвать S3.putObject https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html

Комментарии:

1. Загрузка файла должна выполняться в html-элементе, который не работает с узлами, поэтому либо мне нужен способ извлечь файл из элемента, а затем использовать этот узел, либо мне нужно сделать это с подписью.

2.Вы используете JavaScript, поэтому, даже если вы не используете nodejs, вы все равно можете использовать AWS sdk с <script src="https://sdk.amazonaws.com/js/aws-sdk-2.410.0.min.js"></script> aws.amazon.com/fr/sdk-for-browser

3. Ссылка, которую вы отправили manly, подробно описывает, как это сделать с помощью приложения Facebook. Я не использую Facebook.

4. Вам необязательно использовать facebook, но вашему веб-сайту действительно понадобятся учетные данные для подключения к AWS… Лучший способ — регистрировать своих пользователей с помощью поставщика удостоверений (Facebook, Google, Cognito, …), чтобы вы могли контролировать, кто может получить доступ к вашей корзине S3. Другой способ сделать это — «жестко закодировать» ваши учетные данные на вашем веб-сайте, что является чрезвычайно опасным способом обработки, потому что это означает, что каждый сможет писать в вашей корзине S3 (я имею в виду, что хакер может использовать эти учетные данные за пределами вашего веб-сайта)