Я хочу создать простую систему загрузки файлов для моего сайта (только я получаю доступ и загрузку), чтобы загрузить мою страницу портфолио. Мой сайт находится на Ruby on Rails, размещенном на Heroku.Ruby on Rails Direct AWS S3 Загрузка с помощью JqueryFileUpload
Итак, я следил за Heroku Tutorial, чтобы загрузить изображения на S3. Он использует жемчужину aws-sdk
. После изучения учебника, когда я пытаюсь загрузить простой .png-файл, я получил следующую ошибку.
Bad Request 400: Bucket POST must contain a field named 'key'. If it is specified, please check the order of the fields.
PortfolioController
def new
@s3_direct_post = S3_BUCKET.presigned_post(key: "${filename}", success_action_status: 201, acl: :public_read)
@portfolio = Portfolio.new()
end
Проверка яваскрипт formData
значения в Виде:
...
fileInput.fileupload({
formData: '<%[email protected]_direct_post.fields.to_json.html_safe %>',
fileInput: fileInput,
url: '<%[email protected]_direct_post.url%>',
type: 'POST',
autoUpload: true,
paramName: 'file',
dataType: 'XML',
replaceFileInput: false,
...
дает:
{
"AWSAccessKeyId"=>"my-access-key",
"key"=>"${filename}",
"policy"=> "long-string",
"signature"=>"randomg-signature-string",
"success_action_status"=>"201",
"acl"=>"public-read"
}
Я пытался добавить синхронизировать мой выбор времени, как показано в /config/initializers/aws.rb
:
AWS.config(access_key_id: ENV['AWS_ACCESS_KEY_ID'],
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'])
AWS::S3.const_set('DEFAULT_HOST', "s3-ap-southeast-1.amazonaws.com")
S3_BUCKET = AWS::S3.new.buckets[ENV['S3_BUCKET']]
После просмотра Google и Stackoverflow, кажется, что Jquery может быть восстановление данных формы, следовательно, портя порядок значений POST ,
Проблема в том, что я относительно новичок в Ruby on Rails и Javascript, поэтому я не уверен, как это сделать.
Любые советы приветствуются. Благодаря!
Я столкнулся с той же проблемой, я решил объединить загрузку изображения с формой и включить в нее все необходимые параметры (ключ, политика, acl и т. Д.) В качестве скрытых элементов ввода. Затем удалите строку formData: '<...>' из файла js, и плагин будет использовать данные формы в порядке на странице.Я столкнулся с одной проблемой, когда подпись была пустой в форме, но так как я смог получить @ s3_direct_post.fields на странице, я заполнил ввод сигнатурой оттуда перед отправкой загрузки изображения. – blaedj