Multipart从浏览器上传到S3存储桶

时间:2015-05-20 19:51:00

标签: javascript php amazon-web-services file-upload amazon-s3

我目前正在开发一个使用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;
    }

0 个答案:

没有答案