Мне нужно разрешить пользователям загружать контент напрямую в Amazon S3. Эта форма работает:
<form action="https://me.s3.amazonaws.com/" method="post" enctype='multipart/form-data' class="upload-form">{% csrf_token %}
<input type="hidden" name="key" value="videos/test.jpg">
<input type="hidden" name="AWSAccessKeyId" value="<access_key>">
<input type="hidden" name="acl" value="public-read">
<input type="hidden" name="policy" value="{{policy}}">
<input type="hidden" name="signature" value="{{signature}}">
<input type="hidden" name="Content-Type" value="image/jpeg">
<input type="submit" value="Upload" name="upload">
</form>
А в функции я определяю политику и подпись. Однако мне нужно передать две переменные в форму - Content-Type
и Key
, которые будут известны только тогда, когда пользователь нажмет кнопку загрузки. Таким образом, мне нужно передать эти две переменные в шаблон после запроса POST, но перед перенаправлением в Amazon.
Было предложено использовать urllib для этого. Я попытался сделать это следующим образом, но я продолжаю получать непостижимую ошибку HTTPError. Вот что у меня сейчас:
if request.method == 'POST':
# define the variables
urllib2.urlopen("https://me.amazonaws.com/",
urllib.urlencode([('key','videos/test3.jpg'),
('AWSAccessKeyId','<access_key'),
('acl','public-read'),
('policy',policy),
('signature',signature),
('Content-Type',content_type),
('file',file)]))
Я также пытался жестко закодировать все значения вместо использования переменных, но все равно получаю ту же ошибку. Что я делаю неправильно и что мне нужно изменить, чтобы иметь возможность перенаправить форму в Amazon, чтобы контент можно было загружать непосредственно в Amazon?