我想使用PHP SDK将一个文件从外部URL直接上传到Amazon S3 bucket。我用以下代码实现了这一点:
$s3 = new AmazonS3();
$response = $s3->create_object($bucket, $destination, array(
'fileUpload' => $source,
'length' => remote_filesize($source),
'contentType' => 'image/jpeg'
));
其中,函数remote_filesize如下所示:
function remote_filesize($url) {
ob_start();
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
$ok = curl_exec($ch);
curl_close($ch);
$head = ob_get_contents();
ob_end_clean();
$regex = '/Content-Length:\s([0-9].+?)\s/';
$count = preg_match($regex, $head, $matches);
return isset($matches[1]) ? $matches[1] : "unknown";
}
但是,如果我可以在上传到Amazon时跳过设置文件大小就好了,因为这可以节省我去自己服务器的行程。但是如果我删除$s3中的设置“长度”属性-
您可以控制远程服务器/主机吗?。如果是这样,您可以设置一个php服务器在本地查询文件并将数据传递给您。
如果没有,您可以使用类似curl的东西来检查标题,就像这样;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://sstatic.net/so/img/logo.png');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$size = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
var_dump($size);
这样,您使用的是HEAD请求,而不是下载整个文件——仍然,您依赖远程服务器发送正确的Content-long标头。
您可以像这样将文件从url直接上传到Amazon S3(我的示例是关于jpg图片的):
1.以二进制形式从url转换内容
$binary = file_get_contents('http://the_url_of_my_image.....');
2.创建一个S3对象,其中包含一个实体,用于将二进制文件传递到其中
$s3 = new AmazonS3();
$response = $s3->create_object($bucket, $filename, array(
'body' => $binary, // put the binary in the body
'contentType' => 'image/jpeg'
));
就这样,速度非常快。享受
根据SkyDrive api(http://msdn.microsoft.com/en-us/library/live/hh826531.aspx#uploading_files),我在帖子请求的正文中以字节[]传递图像的内容。文件创建发生在skyDrive服务器上,但当我在skyDrive中打开它时,它说“文件应用程序被损坏或损坏”。 请求的正文 --A300x内容处理:表单数据;name=“f
我尝试使用C#将文件上传到FTP服务器。文件已上传,但字节为零。
我在尝试将文件上传到我的S3存储桶时遇到了问题。一切正常,除了我的文件参数似乎不合适。我正在使用Amazon S3 sdk从nodejs上传到s3。 以下是我的路线设置: 这是个项目。upload()函数: 将“Body”参数设置为类似“hello”的字符串可以正常工作。根据doc,Body必须获取(Buffer、类型化数组、Blob、String、ReadableStream)对象数据。但是,上
我正在尝试上传一个文本文件(也尝试了PDF等)到Salesforce。文本文件包含“Hello World”。 这是我正在使用的代码 这将导致以下看起来符合Salesforce指导原则的请求正文:https://developer.Salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_sobject_insert_update_bl
我正在使用wget命令将文件上载到http。 这是我的错误消息: `FOLDER\u NAME'解析示例。网络。。。我连接到示例。净值| 10.00.00.009 |:80。。。有联系的。HTTP请求已发送,正在等待响应。。。401连接示例时拒绝访问。净值| 10.00.00.009 |:80。。。有联系的。HTTP请求已发送,正在等待响应。。。500内部服务器错误 请帮助解决此错误。 注意:服务
httpclient,HttpTime 4.1.3 我试图通过http将文件上载到远程服务器,但没有成功。 这是我的代码: 服务器是Solr。 这是为了替换像这样调用的工作bash脚本, <代码>卷曲http://localhost:8080/solr/update/extract?literal.id=bububu 如果我尝试设置“内容类型”“多部分/表单数据”,接收部分会说没有边界(这是真的)