php如何上传图片到第三方API取返回地址

网上有找到一个源码,但是太花俏了,用的全是JS,我完全看不懂。
所以在这请教大哥们能帮我写个简单的,只需要提交上传取返回地址。
我菜鸟,太复杂看不懂!

https://sm.ms/api/upload 这是post API接口

这是提交参数描述

 参数名称   类型  是否必须    描述
smfile  File    是 表单名称。上传图片用到
ssl Bool    否 是否使用 https 输出,强制开启
format  String  否 输出的格式。可选值有 json、xml。默认为 json

这是返回值

名称  类型  示例值   描述
code    String  success 上传文件状态。正常情况为 success。出现错误时为 error
filename    String  smms.jpg    上传文件时所用的文件名
storename   String  561cc4e3631b1.png   上传后的文件名
size    Int 187851  文件大小
width   Int 1157    图片的宽度
height  Int 680 图片的高度
hash    String  nLbCw63NheaiJp1 随机字符串,用于删除文件
delete  String  https://sm.ms/api/delete/nLbCw63NheaiJp1    删除上传的图片文件专有链接
url String  https://ooo.0o0.ooo/2015/10/13/561cfc3282a13.png    图片服务器地址
path    String  /2015/10/13/561cfc3282a13.png   图片的相对地址
msg String  No files were uploaded. 上传图片出错时将会出现 

问题已解决!!!!!!!!!!!!!!

图片说明

5个回答

 <?php
$url = "https://sm.ms/api/upload";
$post_data = array(
"smfile" => "@".str_replace("\\","/",realpath("1.gif"))
);
$ch = curl_init();
curl_setopt($ch , CURLOPT_URL , $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch , CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);
curl_close($ch);
if( $output!==false){
$obj=json_decode($output,true);
echo $obj['data']['url'];
}
else echo "提交失败!";
?>
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 或者参考这个,直接构造POST信息体,POST到接口。我这里php5.3测试可以。http://www.w3dev.cn/article/20180613/php-post-binary-data-to-api-url.aspx
一年多之前 回复
weixin_41959390
梅川酷芷 嗯嗯
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: move_uploaded_file保存你服务器的其他地方,然后curlfile用保存后的地址
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 是你,你要先保存到服务器,然后curlfile的参数为你保存的路径就行了。怪不得这个代码没效果,你的php是5.5以上的了吧,我的5.3的,没有curlfile对象。。
一年多之前 回复
weixin_41959390
梅川酷芷 嗯,我的是放在服务器的,如果要传到API,首先要传到服务器,然后得到地址在传到API,是这个意思吧
一年多之前 回复
showbo
支付宝加好友偷能量挖 直接传tmp后缀校验会错误
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 获取客户端的没有意义的,安全问题也获取不到客户端路径。临时文件内容正确,后缀.tmp。这个啰嗦了。不行只能先保存到本地再上传到接口了
一年多之前 回复
weixin_41959390
梅川酷芷 你意思先上传到我服务器,获取地址然后在传到API吗?
一年多之前 回复
weixin_41959390
梅川酷芷 临时的文件格式不是图片格式呀,提交不到API
一年多之前 回复
weixin_41959390
梅川酷芷 那怎么获取表单打开的绝对路径呢
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: <form method="post" enctype="multipart/form-data" action="https://sm.ms/api/upload"><input type="file" name="smfile" /><input type="submit" /></form>这种?你可以提交你i自己的php,临时目录获取文件发送到接口也行的
一年多之前 回复
weixin_41959390
梅川酷芷 获取不到返回值?
一年多之前 回复
weixin_41959390
梅川酷芷 你给我的代码是绝对路径,表单的只有临时路径
一年多之前 回复
weixin_41959390
梅川酷芷 不是,能获取到值,但是不知道怎么运用上去
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 表单你获取不到返回值。。
一年多之前 回复
weixin_41959390
梅川酷芷 老大,怎么用表单file提交呢,不是直接用地址。
一年多之前 回复
weixin_41959390
梅川酷芷 老大,我解决了问题了。看我修改了帖子有我最终的代码图。
一年多之前 回复
weixin_41959390
梅川酷芷 我直接用表单提交到API ,不做任何处理是可以提交上去的。
一年多之前 回复
weixin_41959390
梅川酷芷 我打印出来的
一年多之前 回复
weixin_41959390
梅川酷芷 Array ( [smfile] => @E:/aci/1.jpg ) {"code":"error","msg":"No files were uploaded."} Notice: Undefined index: data in E:\aci\c.php on line 21
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 你用我的这个,需要有一张图片为1.gif,并且和php文件同一个目录下才能使用
一年多之前 回复
weixin_41959390
梅川酷芷 我的是WINDOW 用的你最新的源码,
一年多之前 回复
showbo
支付宝加好友偷能量挖 这个我测试的,路径我自己本地的。你的是window还是unix系统。window用realpath转为物理路径后替换\为/。unix不太清楚路径格式。
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: "smfile" => "@".str_replace("\\","/",realpath("1.gif"))改成你本地文件路径啊
一年多之前 回复
weixin_41959390
梅川酷芷 老大我打印$output 这个变了返回的是{"code":"error","msg":"No files were uploaded."}
一年多之前 回复
weixin_41959390
梅川酷芷 回复showbo: 老大,报错呀,你帮我看看
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 记得采纳了:)。。
一年多之前 回复
weixin_41959390
梅川酷芷 谢谢老大,每次都是你帮我解决问题。。。。
一年多之前 回复

CURL DEMO
function curl_post_https($url,$data){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓异常
}
curl_close($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据,json格式
}
$data就是POST的数据 可以是file
你自己抓包跟着写就行 这样还不会的话 可以考虑转行了 curl功能开启要在ini配置文件取消注释

weixin_41959390
梅川酷芷 帮我看看呗
一年多之前 回复
weixin_41959390
梅川酷芷 怎么指定提交到smfile这个参数
一年多之前 回复
weixin_41959390
梅川酷芷 感谢
一年多之前 回复

$url = "https://sm.ms/api/upload";
$post_data = array(
"smfile" => "@".str_replace("\\","/",realpath("a.txt"))
);
$ch = curl_init();
curl_setopt($ch , CURLOPT_URL , $url);
curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch , CURLOPT_POST, 1);
curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // https请求 不验证证书和hosts
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
$output = curl_exec($ch);

curl_close($ch);
echo $output;
weixin_41959390
梅川酷芷 而且,API返回的是错误代码,code] => error [msg] => No files were uploaded.
一年多之前 回复
weixin_41959390
梅川酷芷 图片地址是改了我本地物理地址,用的也是你最新发的,运行报错,我打印$obj 是空的
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 还有图片路径要改为你本地的物理路径,图片。。。传其他的会出错
一年多之前 回复
showbo
支付宝加好友偷能量挖 回复weixin_41959390: 传图片,看我最新发的,要添加useragent
一年多之前 回复
weixin_41959390
梅川酷芷 老大,我打印出来是空的。Array ( [code] => error [msg] => No files were uploaded. )
一年多之前 回复
weixin_41959390
梅川酷芷 回复showbo: Notice: Undefined index: data in E:\aci\c.php on line 18 老大,复制你的过来报错了
一年多之前 回复
showbo
支付宝加好友偷能量挖 要添加USER-AGENT,要不不给请求。。curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
一年多之前 回复

@qq_24597781
看看哪里有问题呀。

 <?php
function curl_post_https($url,$data){ // 模拟提交数据函数
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓异常
}
curl_close($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据,json格式
}
 if (isset($_FILES['smfile'])){
    $smfile=$_FILES['smfile'];
echo curl_post_https("https://sm.ms/api/upload",$smfile);
}
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml">  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  
<title></title>   
</head>
<body>
<form  method="post" enctype="multipart/form-data">  
<input name="smfile" type="file"/><input name="" type="submit" value="上传" />  
</form> 
</body>  
</html>  

![图片说明](https://img-ask.csdn.net/upload/201806/13/1528862334_977110.jpg)图片说明

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
php怎么把第三方接口返回的压缩包保存到服务器?
-
php怎么通过api接口上传图片?
-
js 轮询API取返回值判断
-
PHP如何做第三方登录 curl?soap?
-
php对接了支付第三方,要用json响应请求,怎么响应?!
-
PHP的c++扩展如何调用第三方库
-
ecshop 请求第三方接口
-
只有聚合app的银行接口怎么被第三方调用!
-
PHP CURL 获取高德web API 时返回不全
-
淘宝API 图片上传问题
-
php qq第三方登录获取不到AccessToken的值,
-
求PHP中文API手册
-
IOS- ImageShack JSON API上传图片
-
微信上传图片 返回media_id的方法 PHP
-
php项目中,ueditor上传图片后图片路径如何获取并保持到数据库中?
-
企业微信认证API,返回成功,为什么非企业人员没有返回OpenID?
-
怎么用JSON获得基于网页的API返回的对象?
-
PHP如何让微信小程序和APP共用一套api接口?
-
安卓端如何上传图片到PHP后台服务器上?
-
程序员真是太太太太太有趣了!!!
网络上虽然已经有了很多关于程序员的话题,但大部分人对这个群体还是很陌生。我们在谈论程序员的时候,究竟该聊些什么呢?各位程序员大佬们,请让我听到你们的声音!不管你是前端开发...
史上最详细的IDEA优雅整合Maven+SSM框架(详细思路+附带源码)
网上很多整合SSM博客文章并不能让初探ssm的同学思路完全的清晰,可以试着关掉整合教程,摇两下头骨,哈一大口气,就在万事具备的时候,开整,这个时候你可能思路全无 ~中招了咩~ ,还有一些同学依旧在使用eclipse或者Myeclipse开发,我想对这些朋友说IDEA 的编译速度很快,人生苦短,来不及解释了,直接上手idea吧。这篇文章每一步搭建过程都测试过了,应该不会有什么差错。本文章还有个比较优秀的特点,就是idea的使用,基本上关于idea的操作都算是比较详细的,所以不用太担心不会撸idea!最后,本文
2019年9月全国程序员工资统计
2019年9月2日,统计了某招聘网站上的所有程序员招聘信息。并汇总如下。
吃人的那些 Java 名词:对象、引用、堆、栈
作为一个有着 8 年 Java 编程经验的 IT 老兵,说起来很惭愧,我被 Java 当中的四五个名词一直困扰着:**对象、引用、堆、栈、堆栈**(栈可同堆栈,因此是四个名词,也是五个名词)。每次我看到这几个名词,都隐隐约约觉得自己在被一只无形的大口慢慢地吞噬,只剩下满地的衣服碎屑(为什么不是骨头,因为骨头也好吃)。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
接班马云的为何是张勇?
上海人、职业经理人、CFO 背景,集齐马云三大不喜欢的张勇怎么就成了阿里接班人? 作者|王琳 本文经授权转载自燃财经(ID:rancaijing) 9月10日,张勇转正了,他由阿里巴巴董事局候任主席正式成为阿里巴巴董事局主席,这也意味着阿里巴巴将正式开启“逍遥子时代”。 从2015年接任CEO开始,张勇已经将阿里巴巴股价拉升了超过200%。但和马云强大的个人光环比,张勇显得尤其...
让程序员崩溃的瞬间(非程序员勿入)
今天给大家带来点快乐,程序员才能看懂。 来源:https://zhuanlan.zhihu.com/p/47066521 1. 公司实习生找 Bug 2.在调试时,将断点设置在错误的位置 3.当我有一个很棒的调试想法时 4.偶然间看到自己多年前写的代码 5.当我第一次启动我的单元测试时 ...
用Python分析2000款避孕套,得出这些有趣的结论
到现在为止,我们的淘宝教程已经写到了第四篇,前三篇分别是: 第一篇:Python模拟登录淘宝,详细讲解如何使用requests库登录淘宝pc端。 第二篇:淘宝自动登录2.0,新增Cookies序列化,教大家如何将cookies保存起来。 第三篇:Python爬取淘宝商品避孕套,教大家如何爬取淘宝pc端商品信息。 今天,我们来看看淘宝系列的第四篇 我们在上一篇的时候已经将淘宝数据爬取下来了,...
Spring Cloud(11)——基于RocketMQ的Stream实现
基于RocketMQ的Stream实现 Spring Cloud Stream是一个消息收发的框架,它提供了一套标准,应用程序只需要按照它的标准进行消息的收发,而不用关注具体的实现机制。具体的实现可以基于不同的消息中间件进行不同的实现,比如Kafka的实现、RabbitMQ的实现、RocketMQ的实现等。官方已经提供了Kafka和RabbitMQ的实现,RocketMQ的实现由Alibaba负责...
Java 13 新特性全面解读
作者 l Hollis 本文经授权转载自Hollis(ID:hollischuang) 2017年8月,JCP执行委员会提出将Java的发布频率改为每六个月一次,新的发布周期严格遵循时间点,将在每年的3月份和9月份发布。 目前该版本包含的特性已经全部固定,主要包含以下五个: JEP 350,Dynamic CDS Archives JEP 351,ZGC: Uncomm...
分享靠写代码赚钱的一些门路
作者 mezod,译者 josephchang10如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。今天给大家分享一个精彩...
技术人员要拿百万年薪,必须要经历这9个段位
很多人都问,技术人员如何成长,每个阶段又是怎样的,如何才能走出当前的迷茫,实现自我的突破。所以我结合我自己10多年的从业经验,总结了技术人员成长的9个段位,希望对大家的职...
面试官:兄弟,说说基本类型和包装类型的区别吧
Java 的每个基本类型都对应了一个包装类型,比如说 int 的包装类型为 Integer,double 的包装类型为 Double。基本类型和包装类型的区别主要有以下 4 点。
多线程编程是后台开发人员的基本功
这里先给大家分享一个小故事:在我刚开始参加工作的那年,公司安排我开发一款即时通讯软件(IM,类似于 QQ 聊天软件),在这之前我心里也知道如果多线程操作一个整型值是要加锁...
进程和线程的区别(超详细)
进程和线程 进程 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的xx.exe就是一个进程。 线程 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。 与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟...
动画:用动画给面试官解释 TCP 三次握手过程
作者 | 小鹿 来源 | 公众号:小鹿动画学编程 写在前边 TCP 三次握手过程对于面试是必考的一个,所以不但要掌握 TCP 整个握手的过程,其中有些小细节也更受到面试官的青睐。 对于这部分掌握以及 TCP 的四次挥手,小鹿将会以动画的形式呈现给每个人,这样将复杂的知识简单化,理解起来也容易了很多,尤其对于一个初学者来说。 学习导图 一、TCP 是什么? TCP(Transmissio...
为什么程序员在学习编程的时候什么都记不住?
在程序员的职业生涯中,记住所有你接触过的代码是一件不可能的事情!那么我们该如何解决这一问题?作者 |Dylan Mestyanek译者 | 弯月,责编 | 屠敏出品 |...
500行代码,教你用python写个微信飞机大战
这几天在重温微信小游戏的飞机大战,玩着玩着就在思考人生了,这飞机大战怎么就可以做的那么好,操作简单,简单上手。 帮助蹲厕族、YP族、饭圈女孩在无聊之余可以有一样东西让他们振作起来!让他们的左手 / 右手有节奏有韵律的朝着同一个方向来回移动起来! 这是史诗级的发明,是浓墨重彩的一笔,是…… 在一阵抽搐后,我结束了游戏,瞬时觉得一切都索然无味,正在我进入贤者模式时,突然想到,如果我可以让更多人已不同的方式体会到这种美轮美奂的感觉岂不美哉? 所以我打开电脑,创建了一个 `plan_game.py`……
唐僧团队要裁员,你会裁谁?
提问: 西游记取经团为了节约成本,唐太宗需要在这个团队里裁掉一名队员,该裁掉哪一位呢,为什么? 为了完成西天取经任务,组成取经团队,成员有唐僧、孙悟空、猪八戒、沙和尚、白龙马。 高层领导: 观音 项目经理: 唐僧 技术核心: 孙悟空 普通团员: 猪八戒、沙和尚 司机: 白龙马 这是个很有意思的项目团队 项目经理:唐僧 得道高僧。 唐僧作为项目经理,有很坚韧的品性和极高的原则性,不达目的不罢...
2019诺贝尔经济学奖得主:贫穷的本质是什么?
2019年诺贝尔经济学奖,颁给了来自麻省理工学院的 阿巴希·巴纳吉(Abhijit Vinayak Banerjee)、艾丝特·杜芙若(Esther Duflo)夫妇和哈...
linux:最常见的linux命令(centOS 7.6)
最常见,最频繁使用的20个基础命令如下: 皮一下,这都是干货偶,大佬轻喷 一、linux关机命令: 1.shutdown命令安全地将系统关机(推荐)参数说明: [-r] 重启计算器。 [-h] 关机后关闭电源〔halt〕。 [-c] cancel current process取消目前正在执行的关机程序。 [-time] 设定关机〔shutdown〕前的时间。 shutdown -h now ...
相关热词 c#sdf数据库连接 c# 使用配置文件 c#float 转int c#报警指示灯 c#复制二维数组 c# 歌词滚动 c#获取数据库一列数据 c#中parse用法 c#异步编程是什么意思 c#验证手机号正则