我目前正在开发一个使用HTML5,javascript和PHP的程序,以允许用户将文件(或文件)上传到S3存储桶。我已经能够使用POST来实现这个目标,但我遇到了有关大文件的问题。为了通过大文件问题,我将文件切成单独的blob,将其附加到formdata并发布到我的PHP脚本。它似乎有效,直到遇到某个路障。无论如何,在搜索并搜索我的问题的类似解决方案后,我遇到了this。他们的例子似乎解决了我将大文件上传到S3的问题,直到我自己运行脚本。运行时,我会得到:
致命错误:未捕获的异常'Aws \ Common \ Exception \ InvalidArgumentException',带有消息'您必须为Body或SourceFile参数指定非空值。'在C:\ vhosts ******。com \ db ***** \ s3-multipart-upload-browser-master \ aws \ Aws \ Common \ Client \ UploadBodyListener.php:91
正如你所看到的,我得到了这个致命的错误,因为我缺乏身体。但是,程序员的文档和帖子here on stackoverflow发誓他能够在不指定“uploadPart”方法调用的body元素的情况下完成此操作。我想知道的是,是否有其他人对此有类似的经历,并为我的困境提供解决方案。
编辑:以下是我在“server.php”中提到的代码块
case 'signuploadpart': {
$command = $client->getCommand('UploadPart',
array(
'Bucket' => TMP_IMG,
'Key' => $_REQUEST['sendBackData']['key'],
'UploadId' => $_REQUEST['sendBackData']['uploadId'],
'PartNumber' => $_REQUEST['partNumber'],
'ContentLength' => $_REQUEST['contentLength']
));
$request = $command->prepare(); //This is the call that is giving me issues
// This dispatch commands wasted a lot of my times :'(
$client->dispatch('command.before_send', array('command' => $command));
$request->removeHeader('User-Agent');
$request->setHeader('x-amz-date', gmdate(DateFormat::RFC2822));
// This dispatch commands wasted a lot of my times :'(
$client->dispatch('request.before_send', array('request' => $request));
sendJson(array(
'url' => $request->getUrl(),
'authHeader' => (string) $request->getHeader('Authorization'),
'dateHeader' => (string) $request->getHeader('x-amz-date'),
));
break;
}