使用php sdk上传图片老是出现 RequestCoreException: cURL resource: Resource id #107; cURL error: Empty reply from server (52)
当文件尺寸变小的话,并且缓存过文件的尺寸也会造成上面的问题。
putObject 文档中有这么个参数:
Content-Length 字符串 否 用于描述HTTP消息体的传输大小。 如果请求头中的Content-Length值小于实际请求体中传输的数据大小,OSS仍将成功创建Object,但Object的大小只能等于Content-Length中定义的大小,其他数据将被丢弃。
但是文档中并没有说小于的情形。
当文档的实际大小小于Content-Length的时候就会出现上面的问题,服务器一直等待,但是并没有那么多数据,然后直到超时。
OSS 的 Content-Length 是使用filesize函数获取的,但是PHP的filesize是会缓存的。
解决方案就是在上传前,使用clearstatcache清除缓存。
Filesize fails to get the real file size after each append with file_put_contents
字面上的意思是 curl操作出错:服务器返回为空
建议您贴一下代码。这是实例:https://help.aliyun.com/document_detail/88473.html?source=5176.11533457&userCode=re2rax3m&type=copy
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\OssClient;
use OSS\Core\OssException;
// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
$accessKeyId = "<yourAccessKeyId>";
$accessKeySecret = "<yourAccessKeySecret>";
// Endpoint以杭州为例,其它Region请按实际情况填写。
$endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 存储空间名称
$bucket= "<yourBucketName>";
// 文件名称
$object = "<yourObjectName>";
// <yourLocalFile>由本地文件路径加文件名包括后缀组成,例如/users/local/myfile.txt
$filePath = "<yourLocalFile>";
try{
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint);
$ossClient->uploadFile($bucket, $object, $filePath);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
看看链接的endpoint是正确的吗?服务器没有给任何返回值,说明链接超时了,但是服务器也没给response,另外看看有没有超时时间的设置
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。