Доступ к корзине запрещен в S3 — ошибка 403 запрещена (Fine-Uploader)

У меня проблема с получением доступа к корзине в Amazon S3. Я следую пошаговым инструкциям в Fineuploader в официальном блоге (загрузка Fineuploader S3 напрямую в Amazon S3 из вашего браузера), я проверяю подобные вопросы, но ни один из них не ссылается на этот конкретный случай.

Мое намерение состоит в том, чтобы скопировать демо fineuploader.com для S3, с той лишь разницей, что я не использую расширенные функции (чанкинг, перетаскивание & сбросить, повторить и т. д.), другими словами, сделать «Простую загрузку».

Извините, если я очень избыточен или очень откровенен, я только хочу прояснить процедуру, которую я сделал.

Я скопировал код на стороне клиента http://fineuploader.com/demos.html#amazon-demo и изменил несколько строк:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="shortcut icon" href="favicon.ico" >

<title></title>

<!--[if lt IE 9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

</head>
<body>

<!-- jQuery ====================================================================== -->
<script src="http://code.jquery.com/jquery-latest.js"></script>

<!-- Fine Uploader JS ====================================================================== -->
<script src="../../custom.fineuploader-5.0.8.js"></script>
<script>
$(document).ready(function () {
$('#fineuploader-s3').fineUploaderS3({
debug: true,
request: {
// REQUIRED: We are using a custom domain
// for our S3 bucket, in this case.  You can
// use any valid URL that points to your bucket.
endpoint: "bucketname.s3.amazonaws.com",

// REQUIRED: The AWS public key for the client-side user
// we provisioned.

// Access key - User create in IAM
accessKey: "AKIAJUGFU2PN7PXXXXXX"},

template: "simple-previews-template",

// REQUIRED: Path to our local server where requests
// can be signed.
signature: {
endpoint: "/fineuploader/html/templates/s3demo.php"},

// OPTIONAL: An endopint for Fine Uploader to POST to
// after the file has been successfully uploaded.
// Server-side, we can declare this upload a failure
// if something is wrong with the file.
uploadSuccess: {
endpoint: "/fineuploader/html/templates/s3demo.php?success"},

// USUALLY REQUIRED: Blank file on the same domain
// as this page, for IE9 and older support.
// iframeSupport: {
//     localBlankPagePath: "/server/success.html"// },

// optional feature
// chunking: {
//     enabled: true
// },

// optional feature
// resume: {
//     enabled: true
// },

// optional feature
// deleteFile: {
//     enabled: true,
//     method: "POST",
//     endpoint: "/s3demo.php"// },

// optional feature
// validation: {
//     itemLimit: 5,
//     sizeLimit: 15000000
// },

// thumbnails: {
//     placeholders: {
//         notAvailablePath: "images/not_available-generic.png",
//         waitingPath: "images/waiting-generic.png"//     }
// }
})
// Enable the "view" link in the UI that allows the file to be downloaded/viewed
.on('complete', function(event, id, name, response) {
var $fileEl = $(this).fineUploaderS3("getItemByFileId", id),
$viewBtn = $fileEl.find(".view-btn");

if (response.success) {
$viewBtn.show();
$viewBtn.attr("href", response.tempLink);
}
});
});
</script>

<!-- Fine Uploader CSS ====================================================================== -->
<link href="../../custom.fineuploader-5.0.8.css" rel="stylesheet">

<!-- Fine Uploader DOM Element ====================================================================== -->
<div id="fineuploader-s3"></div>

<!-- Fine Uploader template ====================================================================== -->
<script type="text/template" id="simple-previews-template">
<div class="qq-uploader-selector qq-uploader">
<div class="qq-upload-drop-area-selector qq-upload-drop-area" qq-hide-dropzone>
<span>Drop files here to upload</span>
</div>
<div class="qq-upload-button-selector qq-upload-button">
<div>Upload a file</div>
</div>
<span class="qq-drop-processing-selector qq-drop-processing">
<span>Processing dropped files...</span>
<span class="qq-drop-processing-spinner-selector qq-drop-processing-spinner"></span>
</span>
<ul class="qq-upload-list-selector qq-upload-list">
<li>
<div class="qq-progress-bar-container-selector">
<div class="qq-progress-bar-selector qq-progress-bar"></div>
</div>
<span class="qq-upload-spinner-selector qq-upload-spinner"></span>
<img class="qq-thumbnail-selector" qq-max-size="100" qq-server-scale>
<span class="qq-edit-filename-icon-selector qq-edit-filename-icon"></span>
<span class="qq-upload-file-selector qq-upload-file"></span>
<input class="qq-edit-filename-selector qq-edit-filename" tabindex="0" type="text">
<span class="qq-upload-size-selector qq-upload-size"></span>
<a class="qq-upload-cancel-selector btn-small btn-warning" href="#">Cancel</a>
<a class="qq-upload-retry-selector btn-small btn-info" href="#">Retry</a>
<a class="qq-upload-delete-selector btn-small btn-warning" href="#">Delete</a>
<a class="qq-upload-pause-selector btn-small btn-info" href="#">Pause</a>
<a class="qq-upload-continue-selector btn-small btn-info" href="#">Continue</a>
<span class="qq-upload-status-text-selector qq-upload-status-text"></span>
<a class="view-btn btn-small btn-info hide" target="_blank">View</a>
</li>
</ul>
</div>
</script>

</body>
</html>

Мой код на стороне сервера был взят из https://github.com/FineUploader/server-examples/blob/master/php/s3/s3demo-thumbnails-cors.php только комментируйте и меняйте комментируйте следующие строки.

Комментируемые строки:

// require 'aws-autoloader.php';
// use Aws\S3\S3Client;

// $serverPublicKey = $_SERVER['PARAM1'];
// $serverPrivateKey = $_SERVER['PARAM2'];

// $expectedMaxSize = 15000000;

Измененные строки:

// Secret key - User create in IAM
$clientPrivateKey = $_SERVER['BIsYDPrOfWyWeUXueJaiaAem7he3R5THxx000Xxx'];
$expectedBucketName = "bucketname";

Кажется, все в порядке, но когда я загружаю изображение, в консоли Chrome появляется ошибка:

POST http://bucketname.s3.amazonaws.com/ 403 (Forbidden)

Ключ доступа и секретный ключ содержат символы X и 0, которые были размещены в целях иллюстрации. Ключи не настоящие.

Я буду признателен за вашу помощь.

0

Решение

$clientPrivateKey = $_SERVER['xxx'];

Я думаю, что это неправильно. В оригинальном файле написано:

// These assume you have the associated AWS keys stored in
// the associated system environment variables
$clientPrivateKey = $_SERVER['AWS_SECRET_KEY'];

Так что либо установите переменную в вашей среде с именем AWS_SECRET_KEY и восстановите строку до того, что было, либо просто используйте

$clientPrivateKey = 'xxx';

Я бы также порекомендовал сменить ключ, так как вы уже опубликовали его в общедоступном месте, и кто-то обязательно сделает гадости с вашим ведром!

2

Другие решения

Других решений пока нет …