curl下载文件遇到的一个小坑,保持原文件名

最近做了一个下载文件的api,然后实际并没有想象中的美好,用户只能使用curl来下载文件,类似如下:
curl -X POST
http://ip/company/api//export
-H ‘Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8’
-H ‘Accept: application/vnd.apache.kylin-v2+json’
-H ‘Accept-Encoding: gzip, deflate, br’
-H ‘Accept-Language: en’
-H ‘Authorization: Basic QURNSU46S1lMSU4=’
-H ‘Content-Type: application/x-www-form-urlencoded’
-H ‘cache-control: no-cache,no-cache’
-d ‘cube=kylin_sales_cube&project=learn_kylin&withDependence=true’
-O
curl官方提供的参数中-o可以指定下载的文件名,-O保持源文件名下载,由于下载的文件名中有整个文件的SHA256码的后6位,所以需要保持原文件名下载,使用-O,然而,
下载下来的文件名竟然叫export,天哪!!!他默认为我的url中最后是资源的名称,查了好久,可以使用参数-OJ或者-O -J来保持原文件名,在此记录下

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`curl` 是一个强大的命令行工具,用于在网络上进行数据传输,特别是常用于下载文件。然而,如果处理不当,尤其是当下载文件或连续下载多个文件时,可能会遇到内存溢出的问题。这是因为`curl`会默认将整个响应内容读入内存中,然后输出到文件或标准输出,如果响应内容过大超过了系统的可用内存,就会导致内存溢出。 具体情况下,可能出现内存溢出的原因有: 1. **大文件下载**:当你尝试一次性下载非常大的文件时,由于内存限制,`curl`可能无法一次性加载整个文件到内存中。 2. **连续下载**:如果你编写了脚本,频繁地使用`curl`下载多个文件,没有正确管理下载过程中的临时文件,累积起来的内存需求也可能超出限制。 3. **无限循环或递归**:如果存在循环调用或者递归下载,没有设置合适的限制条件,也会造成内存占用持续增长。 4. **缓存选项**:`curl`的一些高级选项,如`-O`(自动写入文件名)或`-J`(保存头部信息),如果没有正确使用,也可能导致内存占用过多。 解决内存溢出的方法包括: 1. **分块下载**:可以使用`--range`选项分段下载,每次只下载文件的一部分,而不是全部。 2. **设置缓冲区大小**:通过`--max-filesize`或`--limit-rate`等选项限制单次下载文件大小。 3. **使用管道`|>`**:可以将`curl`的输出导向另一个程序(如`split`),避免一次性将整个响应读入内存。 4. **监控内存使用**:在Linux中,你可以使用`top`或`ps`命令检查进程内存占用,并根据需要调整或优化下载策略。 5. **设置超时和重试机制**:避免因网络问题或其他原因导致的长时间阻塞,从而占用过多内存。 相关问题: 1. 如何使用`curl`的范围选项下载文件? 2. 如何查看Linux系统中的进程内存占用情况? 3. `curl`中如何设置下载速率限制?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值