未指定源文件时,AWS S3 Multipart上载工作

时间:2014-08-27 01:49:56

标签: php ajax amazon-web-services amazon-s3

我已经构建了一个将文件直接上传到S3的ajax上传程序,它完美无缺地解决了它实际上是如何工作的问题。我已经对文档中显示的方式采取了不同的方法,而不是指定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']
));

$这 - >请求 - >查询['的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));

在任何地方都没有引用临时文件路径,我已经尝试过挖掘SDK,但似乎找不到任何能够找到查找文件的方法。此外,由于这是通过AJAX发送的,因此它不会创建临时文件。

删除Metadata ContentType并在Key中分配随机CreateMultipartUpload仍会上传文件,最后会以Key中指定的名称结束...有两个其他开发人员看着它,两者都无法弄清楚它是如何工作的。

0 个答案:

没有答案