Можно ли загрузить изображение непосредственно на s3 без сохранения в локальной папке? - PullRequest
0 голосов
/ 29 мая 2018

Я использую функции сравнения для загрузки изображений с пути, как set_contents_from_file() и т. Д.Но они берут изображение с пути и загружают его.Есть ли какая-либо функция для прямой загрузки imageObject напрямую из кода Python?

1 Ответ

0 голосов
/ 29 мая 2018

Да, S3 принимает загрузки с помощью специально созданных и предварительно авторизованных форм HTML POST.Вы можете включить эти формы в любую веб-страницу, чтобы посетители вашего сайта могли отправлять вам файлы, используя обычный веб-браузер.

Посмотрите на S3 POST Upload

Подводя итог, речь идет о создании такой формы:

<html>
  <head>
    <title>S3 POST Form</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>
  <body>
    <form action="https://s3-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
      <input type="hidden" name="key" value="uploads/${filename}"> <input type="hidden" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY">
      <input type="hidden" name="acl" value="private">
      <input type="hidden" name="success_action_redirect" value="http://localhost/">
      <input type="hidden" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED">
      <input type="hidden" name="signature" value="YOUR_CALCULATED_SIGNATURE">
      <input type="hidden" name="Content-Type" value="image/jpeg">
      <!-- Include any additional input fields here -->
      File to upload to S3: <input name="file" type="file">
      <br>
      <input type="submit" value="Upload File to S3">
    </form>
  </body>
</html>

Затем добавьте документ политики

S3 POST формы включают в себя документ политики, который авторизует формуи накладывает ограничения на файлы, которые могут быть загружены.Когда S3 получает файл через форму POST, он проверяет документ политики и подпись, чтобы подтвердить, что форма была создана кем-то, кому разрешено хранить файлы в целевой учетной записи S3.

{"expiration": "2009-01-01T00:00:00Z",
  "conditions": [ 
    {"bucket": "s3-bucket"}, 
    ["starts-with", "$key", "uploads/"],
    {"acl": "private"},
    {"success_action_redirect": "http://localhost/"},
    ["starts-with", "$Content-Type", ""],
    ["content-length-range", 0, 1048576]
  ]
}

И, наконец, подпишите ваши запросы POST

Чтобы заполнить форму POST S3, вы должны подписать ее, чтобы доказать S3, что вы действительно создали форму.Если вы не подпишете форму должным образом или кто-то другой попытается изменить вашу форму после того, как она была подписана, служба не сможет авторизовать ее и отклонит загрузку.

import base64
import hmac, hashlib

policy = base64.b64encode(policy_document)

signature = base64.b64encode(hmac.new(AWS_SECRET_ACCESS_KEY, policy, hashlib.sha1).digest())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...