Я создал загрузчик ajax, который загружает файлы непосредственно на S3, он работает безупречно, что я запутался в том, как он работает. Я применил другой подход к тому, как это показано в документации, вместо указания sourceFile имя файла указывается в метаданных. Не отправляется местоположение файла.
Я использую AWS SDK 2.4.3
$client = S3Client::factory(array( 'key' => AWS_KEY, 'secret' => AWS_SECRET )); $extension = pathinfo($this->request->query['fileInfo']['name'], PATHINFO_EXTENSION); $model = $client->createMultipartUpload(array( 'Bucket' => AWS_BUCKET_NAME, 'Key' => uniqid() . '.' . $extension, // Files don't share same name 'ContentType' => $this->request->query['fileInfo']['type'], // image/png 'Metadata' => $this->request->query['fileInfo'] ));
$ This-> request-> запрос [ 'FILEINFO']
array( 'name' => "image.png", 'type' => "image/png", 'size' => 196292, 'lastModifiedDate' => Wed Aug 20 2014 15:02:29 GMT+1200 (NZST) );
SignUploadPart
$command = $client->getCommand('UploadPart', array( 'Bucket' => AWS_BUCKET_NAME, 'Key' => $this->request->query['sendBackData']['key'], // 53fd39a185f43.png 'UploadId' => $this->request->query['sendBackData']['uploadId'], // hSJuBm3dWCMM1b.... 'PartNumber' => $this->request->query['partNumber'], 'ContentLength' => $this->request->query['contentLength'] )); $request = $command->prepare(); $client->dispatch('command.before_send', array('command' => $command)); $request->removeHeader('User-Agent'); $request->setHeader('x-amz-date', gmdate(DateFormat::RFC2822)); $client->dispatch('request.before_send', array('request' => $request));
Theres не ссылается на путь к файлу temp в любом месте, я пробовал копать через SDK, но не могу найти ничего, что показывает способ поиска файла. Кроме того, поскольку это отправляется через AJAX, он не создает временный файл.
Удаление Metadata
ContentType
и назначение случайного Key
в CreateMultipartUpload
прежнему загружает файл, просто заканчивается именем, указанным в Key … Если бы два других разработчика смотрели на него, и оба не могли понять, как он работает.