Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 未指定源文件时,AWS S3多部分上载工作正常_Php_Ajax_Amazon Web Services_Amazon S3 - Fatal编程技术网

Php 未指定源文件时,AWS S3多部分上载工作正常

Php 未指定源文件时,AWS S3多部分上载工作正常,php,ajax,amazon-web-services,amazon-s3,Php,Ajax,Amazon Web Services,Amazon S3,我已经构建了一个ajax上传程序,可以直接将文件上传到S3,它工作得非常完美。我对它的实际工作方式感到困惑。我对文档中如何显示它采取了不同的方法,在元数据中指定文件名而不是指定源文件。未发送任何文件位置 我正在使用AWS SDK 2.4.3 $client = S3Client::factory(array( 'key' => AWS_KEY, 'secret' => AWS_SECRET )); $extension = pathinfo($this->re

我已经构建了一个ajax上传程序,可以直接将文件上传到S3,它工作得非常完美。我对它的实际工作方式感到困惑。我对文档中如何显示它采取了不同的方法,在元数据中指定文件名而不是指定源文件。未发送任何文件位置

我正在使用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->query['fileInfo']

array(
    'name' => "image.png", 
    'type' => "image/png", 
    'size' => 196292, 
    'lastModifiedDate' => Wed Aug 20 2014 15:02:29 GMT+1200 (NZST)
);
信号上传部分

$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发送的,所以它不会创建临时文件


删除
元数据
内容类型
并在
CreateMultipartUpload
中分配一个随机的
,仍然会上载文件,只会以键中指定的名称结束。。。让另外两名开发人员查看它,但他们都不知道它是如何工作的。

这就是您的全部代码吗?如前所述,它甚至无法完成多部分上传,因为需要额外的操作才能完成。不,这只是指定文件的上半部分。将进行编辑以添加上传部件的发送方式。不要认为需要使用
completeMultipartUpload
来显示没有指定文件路径。从您目前发布的内容来看,这不应该起作用。你有什么证据证明它是有效的?我有超过数百种媒体的公共URL,还有其他服务也可以从公共URL复制媒体并对媒体进行编码。