最近写的一个小功能需要通过rest方式上传文件,因此就在网上找了一些解决方案。接下来说明以下我采用的解决方案:
我是利用curl来实现的,其中CURLOPT_POST的值为TRUE代表的是请求类型为POST请求,CURLOPT_POSTFIELDS定义要传递的值,下面是我的curl类:

 <?php
class Curl{
protected $uri = '';
protected $hr = null; public function __construct($uri)
{
$this->uri = $uri; $this->hr = curl_init(); curl_setopt($this->hr, CURLOPT_RETURNTRANSFER, true);
curl_setopt($this->hr, CURLOPT_URL, $this->uri);
} public function post($data = array(),$param = array()) {
if(empty($data))
{
return FALSE;
} $opts = array(
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data
); if(!empty($param))
{
curl_setopt($this->hr,CURLOPT_HTTPHEADER,array("params:".http_build_query($param)));
} curl_setopt_array($this->hr, $opts);
$content = curl_exec($this->hr);
$status = curl_getinfo($this->hr, CURLINFO_HTTP_CODE);
$content_type = curl_getinfo($this->hr, CURLINFO_CONTENT_TYPE); echo $content;
}
}
?>

ps:这里我主要说的是上传文件,因此curl类中我也只定义了post方法。

接下来是我调用curl的post类上传图片的上传页面:

 <?php
require_once 'curl.php'; if(isset($_FILES['file']) && !empty($_FILES['file']))
{
$file = $_FILES['file']; $newFile = './'.$file['name']; //复制文件到上传目录
move_uploaded_file($file['tmp_name'], $newFile); $curl = new Curl('http://xxxx/testCurl/post.php'); $data = array(
'pic'=>"@D:/www/testCurl/".$file['name'],
'id'=>"1"
); $curl->post($data);
}else{
?>
<html>
<head></head>
<body>
<form method='post' enctype="multipart/form-data">
<input type="file" name="file">
<button type="submit">上传</button>
</form>
</body>
</html>
<?php
}
?>

ps:定义传递数据时,加@符号表示是上传文件,@后的文件路径需要是绝对路径。

在rest端只需要使用$_FILES就可以接收到上传的文件了,处理方式与普通上传的处理方式相同。

PHP访问REST API上传文件的解决方案的更多相关文章

  1. php 下 html5 XHR2 + FormData + File API 上传文件

    FormData的作用: FormData对象可以帮助我们自动的打包表单数据,通过XMLHttpRequest的send()方法来提交表单.当然FormData也可以动态的append数据.FormD ...

  2. 演示如何通过 web api 上传文件MVC40

    演示如何通过 web api 上传文件WebApiWebFormHost/UploadFileController.cs /* * 通过 web api 上传文件 */ using System; u ...

  3. 返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, .net 4.5 带来的更方便的异步操作

    原文:返璞归真 asp.net mvc (11) - asp.net mvc 4.0 新特性之自宿主 Web API, 在 WebForm 中提供 Web API, 通过 Web API 上传文件, ...

  4. 使用GitHub API上传文件及GitHub做图床

    本文介绍GitHub API基础及上传文件到仓库API,并应用API将GitHub作为图床 GitHub API官方页面 GitHub API版本 当前版本为v3,官方推荐在请求头中显示添加版本标识. ...

  5. 使用python3.7+Vue.js2.0+Django2.0.4异步前端通过api上传文件到七牛云云端存储

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_130 之前一篇文章是通过普通js+tornado来上传七牛云:使用Tornado配合七牛云存储api来异步切分上传文件,本次使用v ...

  6. C# Web Api 上传文件

    一. 使用默认方法上传文件: 1.Action: /// <summary> /// 上传文件 使用上传后的默认文件名称 /// 默认名称是BodyPart_XXXXXX,BodyPart ...

  7. 1.5 WEB API 上传文件

    1.前提,设置跨域 2.在控制器头添加允许跨域 /// <summary> /// 文件管理口控制器 /// </summary> [EnableCors("*&qu ...

  8. HttpClient 测试web API上传文件实例

    1.使用HttpClient 测试上传文件并且设置header信息: using Lemon.Common; using Newtonsoft.Json; using System; using Sy ...

  9. 前端AngularJS后端ASP.NET Web API上传文件

    本篇体验使用AngularJS向后端ASP.NET API控制器上传文件.    首先服务端: public class FilesController : ApiController { //usi ...

随机推荐

  1. BZOJ1937 [Shoi2004]Mst 最小生成树

    首先由贪心的想法知道,树边只减不加,非树边只加不减,令$w_i$表示i号边原来的边权,$d_i$表示i号边的改变量 对于一条非树边$j$连接着两个点$x$.$y$,则对于$xy$这条路径上的所有树边$ ...

  2. asp.net core StaticFiles中间件修改wwwroot

    new StaticFileOptions() { FileProvider = new PhysicalFileProvider(Path.Combine(Directory.GetCurrentD ...

  3. mysql启动错误

    1.启动时,显示ERROR tail localhost.localdomain.err 错误日志 2.新增目录,启动成功

  4. shaerpoint designer 无法创建 visio 2013工作流

    问题描述 当我想创建一个SharePoint 2013 工作流的时候,打开SharePoint 2013 Designer(一下简称SPD),发现没有SharePoint 2013 工作流的选项.原来 ...

  5. jQuery实现图片延迟加载

    html: <img src ="占位图路径" data-original="真实图片路径" /> js: $("img").l ...

  6. pandas进行数据分析需要的一些操作

    一.查看数据 1.查看DataFrame前xx行或后xx行a=DataFrame(data);a.head(6)表示显示前6行数据,若head()中不带参数则会显示全部数据.a.tail(6)表示显示 ...

  7. ZOJ 3646 Matrix Transformer 二分匹配,思路,经典 难度:2

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4836 因为要使对角线所有元素都是U,所以需要保证每行都有一个不同的列上有U,设 ...

  8. 获取css style值

    var obj=document.getElementById("btn");var currentStyle=null;if(obj.currentStyle){ current ...

  9. How to setup SVN?

    2014-01-08 11:43:50 如何简单设置SVN(前提是SVN已经安装) 1. 创建一个目录: mkdir -p ~/svn/2.1.J.1.1 2. 进入新创建的目录: cd svn/2. ...

  10. Xcode6.2创建Empty Application

    运行Xcode 6,创建一个Single View Application工程.   创建好后,把工程目录下的Main.storyboard和LaunchScreen.xib删除,扔进废纸篓.   打 ...