我尝试将文件大小为4GB的文件发布到REST API。
cURL不使用此大小上传文件,而是发布Content-Length:0的文件。
curl -v -i -d @"/work/large.png" -H "Transfer-Encoding: chunked" http://localhost:8080/files
* Adding handle: conn: 0x7fcafc00aa00
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x7fcafc00aa00) send_pipe: 1, recv_pipe: 0
* About to connect() to localhost port 8080 (#0)
* Trying localhost...
* Connected to localhost (localhost) port 8080 (#0)
> POST /files HTTP/1.1
> User-Agent: curl/7.30.0
> Host: localhost:8080
> Accept: */*
> Transfer-Encoding: chunked
> Authorization: bearer XXX.XXX.XXX
> x-user-token: bearer XXX.XXX.XXX
* upload completely sent off: 5 out of 0 bytes
< HTTP/1.1 201 Created
HTTP/1.1 201 Created
< Date: Thu, 02 Jan 2014 14:55:46 GMT
Date: Thu, 02 Jan 2014 14:55:46 GMT
< ETag: "d41d8cd98f00b204e9800998ecf8427e"
ETag: "d41d8cd98f00b204e9800998ecf8427e"
< Location: http://localhost:8080/files/66032e34-9490-4556-8495-fb485ca12811
Location: http://localhost:8080/files/66032e34-9490-4556-8495-fb485ca12811
* Server nginx/1.4.1 is not blacklisted
< Server: nginx/1.4.1
Server: nginx/1.4.1
< Content-Length: 0
Content-Length: 0
< Connection: keep-alive
Connection: keep-alive
使用较小尺寸的文件将按预期工作。
-rw-r--r-- 1 user1 wheel 4403200000 2 Jan 15:02 /work/large.png
为什么上传失败?并且,如何正确上传这样的文件?
干杯。
答案 0 :(得分:5)
我认为您应该考虑使用-T
选项而不是--data-binary
。 --data-binary
将整个文件加载到内存中(curl 7.47)。最好是速度很慢,最坏的情况是OOM杀手会回复Killed
消息。
curl -XPOST -T big-file.iso https://example.com
答案 1 :(得分:1)
要使用CURL上传大型二进制文件,您需要使用$product = mysqli_query($connection, "SELECT * FROM `fr` WHERE active = '1' AND product = '1' ");
while($rows = mysqli_fetch_assoc($product)){
if ($rows['text'] != NULL)
{
$text .= '<p class="lead">' . $rows['text'] .'</p>';
}
if ($rows['img'] != NULL)
{
$img .= '<img class="img-responsive" src="img/description/' . $rows['img'] . '" alt="">';
}
$products .= '<div class="content-section">
<div class="container">
<div class="row">
<p class="lead">' . $text.'</p>
<div class="col-sm-12" align="center"> '.$img.' </div>
</div>
</div>
</div>';
}
echo $products;
标志。
就我而言:
--data-binary
注意:这实际上是@KarlC评论的扩展版本,实际上是正确的答案。
答案 2 :(得分:0)
您是否验证连接没有超时? 检查CURLOPT_POSTFIELDS has a length or size limit? 查看Can't post data to rest server using cURL with content length larger than 1MB
但根据我的研究,我可以说,问题是在服务器端。现在可能是内存问题(缓冲区大小相关),超时问题......而且很大程度上取决于您在服务器端使用的平台。因此,提供有关服务器端和一些日志输出的一些详细信息...特别是尝试捕获错误日志。