当前位置: 首页 > 知识库问答 >
问题:

低级API多部分文件上载过程不工作

何高歌
2023-03-14

我们正在尝试通过多部分文件上传过程上传文件。通过使用下面给出的代码:

while (!feof($file)) {

$result = $s3->uploadPart(array(
    'Bucket'     => $bucket,
    'Key'        => $key,
    'UploadId'   => $uploadId,
    'PartNumber' => $partNumber,
    'Body'       => fread($file, filesize($filename))
));
$parts[] = array(
    'PartNumber' => $partNumber++,
    'ETag'       => $result['ETag'],
);
}

//4.完成多部分上传。

$result = $s3->completeMultipartUpload(array(

    'Bucket'   => $bucket,
    'Key'      => $key,
    'UploadId' => $uploadId,
    'Parts'    => $parts,
));
$url = $result['Location'];

fclose($file);

通过使用此代码,文件被转换成多部分,但不可用于上传文件。它通过print_r显示这种类型的错误:

Guzzle\Service\Resource\Model Object
(

[structure:protected] => 
[data:protected] => Array
    (
        [ServerSideEncryption] => 
        [ETag] => "fcfc6838dfrtefr87b27b642e7d63021"
        [SSECustomerAlgorithm] => 
        [SSECustomerKeyMD5] => 
        [RequestId] => 4RTYPEFE054567369BD46D
    )

)

上传 /tmp/phplA534j.第2部分

Guzzle\Service\Resource\Model Object
(

[structure:protected] => 
[data:protected] => Array
    (
        [ServerSideEncryption] => 
        [ETag] => "d41d8uytrf67fdfrf00b204e9800998ecf8427e"
        [SSECustomerAlgorithm] => 
        [SSECustomerKeyMD5] => 
        [RequestId] => YTYPO67167874586EF802536C
    )

)

正在上载/tmp/phplA534j的第3部分。

你能帮帮我吗?

共有1个答案

潘嘉佑
2023-03-14

两件事。首先,您可以使用SourceFile代替Body:

$result = $s3->uploadPart(array(
    'Bucket'     => $bucket,
    'Key'        => $key,
    'UploadId'   => $uploadId,
    'PartNumber' => $partNumber,
    'SourceFile'       => 'Path/To/Your/File.ext')
));

其次,这不是完成上传的正确方式:

$result = $s3->completeMultipartUpload(array(

    'Bucket'   => $bucket,
    'Key'      => $key,
    'UploadId' => $uploadId,
    'MultipartUpload'    =>array('Parts'=>  $parts),
));
 类似资料:
  • Im使用Spring Boot,并希望使用控制器接收多部分文件上传。当发送文件时,我一直得到错误415不支持的内容类型响应,并且控制器从未到达 我尝试在HTML/JSP页面和使用RESTTemplate的独立客户端应用程序中使用Form:Action发送。所有尝试的结果都是一样的 从multipart文档看来,边界参数必须添加到multipart上载,但这似乎与控制器接收不匹配 我的控制器方法设置

  • 关于Spring MVC应用程序中的多部分文件上传问题,我已经看到了很多关于stackoverflow的答案。我一步一步地确保我不会重复别人犯过的错误。 这是我的表格 在pom文件中我有依赖项 因此,当我停在调试器中时,request对象显示文件已被接收,甚至存储在jBoss临时文件夹中,我并不感到惊讶。 你能指出Spring看不到上传的文件我会错过什么吗?

  • 我有一个endpoint,它将图像文件上传到服务器,然后上传到S3。 当我在本地主机上运行时,MultipartFile字节大小正确,并且上传成功。 然而,当我将它部署到EC2实例时,上传的文件大小不正确。 控制器代码 在 方法中,打印 file.size 会导致大小错误。 实际文件大小是649305字节,但是当上传到我的prod服务器时,它读取为1189763字节。 我的生产服务器是一个AWS

  • 我正在尝试使用Support Bee API创建附件,如下所述:https://supportbee.com/api#create_attachment 我编写了一个服务,它使用创建并发送使用文件名的请求。 如果我在《邮递员》中测试,它会成功。我正在为正文使用,只是从UI中选择要上载的文件: 当我试图通过我的服务上传它时,它不起作用: 这将导致500内部服务器错误。检查对象时,我可以看到它的标题值

  • These are advanced, low-level API features that should, for most people not be necessary to worry about. They are lightly documented here, and in the future will have more documentation, but the empha

  • 我想知道是否可以有一个postendpoint来接受包含multipartfile和其他数据的json负载。例如,我的身体对象看起来像: 另一个相关的问题是,在用于上传文件https://spring.io/guides/gs/uploading-files/的springboot文档示例中,文件是请求路径的一部分,而不是有效负载。这对我来说似乎很奇怪,那么有没有一种方法可以将文件绑定到请求体?