目录

  • 一、需求
  • 二、实现方式
  • 三、postman使用
  • 四、实现代码
  • 五、保存的文件
  • 六、这张图片还不错,分享给大家。

一、需求

传2个参数:uid 用户ID,photo图片,然后保存到项目相对路径:public/file/use/日期/ 下,存(相对路径+唯一文件名)到数据表。

二、实现方式

1、工具:postman
2、框架:TP
就这一句用到了TP的方法,改成你框架的(对应方法/常量)即可

$thinkPath = Env::get('root_path');    //框架应用根目录,命名空间为:use think\facade\Env;

三、postman使用

1、上传单个图片,请求接口,这里打印的是 $_FILE[‘photo’]的信息。注意:这里的photo是没有中括号[]的。

打印的result结果为:

array ('file_name' => '眼前一亮.jpg','unique_name' => 'pic_5ebe4a48047512.30197208.jpg','save_path' => 'public/file/use/2020-05-15/pic_5ebe4a48047512.30197208.jpg','uid' => '999',
)

2、上传多个图片,请求接口,这里打印的是 $_FILE[‘photo’]的信息。注意:这里的photo是有中括号[]的。
打印的result结果为:

array (0 => array ('file_name' => '眼前一亮.jpg','unique_name' => 'pic_5ebe4a5aeb0454.04678583.jpg','save_path' => 'public/file/use/2020-05-15/pic_5ebe4a5aeb0454.04678583.jpg','uid' => '999',),1 => array ('file_name' => '眼前一亮.jpg','unique_name' => 'pic_5ebe4a5aeb8135.16792457.jpg','save_path' => 'public/file/use/2020-05-15/pic_5ebe4a5aeb8135.16792457.jpg','uid' => '999',),
)

四、实现代码

<?phpnamespace app\index\controller;use think\facade\Env;class Ablog extends Base{/*** 请求方式 POST* @return 返回Json数据*/public function test5(){$uid = empty($_POST['uid']) ? '' : $_POST['uid'];$data = empty($_FILES['photo']) ? [] : $_FILES['photo'];   //文件参数名为 photoif (empty($uid)){return 'param [uid] is required';}if (empty($data)){return 'please upload file';}//上传单个文件$result = $this->uploadOne($data, $uid);if ($result){$result['uid'] = $uid;  //拼接上 $uid// 这里可以把数据存入数据库
//            $pictureDao = new PictureDao();
//            $pictureDao->insert($result);
//            var_export($result);var_export($result);die();}/*-----------------------------分割线-----------------------------*///上传多个文件:打开 /**/ 测试
//        $result = $this->uploadMore($data, $uid);//传了$uid/*$result = $this->uploadMore($data); //没传 $uidif ($result){//由于没传$uid,这里要循环拼接一下$uid数据foreach ($result as &$value){   //直接引用赋值$value['uid'] = $uid;}// 这里可以把数据存入数据库
//            $pictureDao = new PictureDao();
//            $pictureDao->insertAll($result);var_export($result);die();}*/return json_encode('success');}/*** 单个文件上传* @param $data 文件信息* @return array 结果数据*/public function uploadOne($data){if ($data['error'] != 0){   //文件上传异常,直接返回[]return [];}//注意:这里处理文件名重复的情况,要保证文件名唯一//这里先获取原文件名的后缀,然后自定义唯一文件名$fileName = $data['name'];$suffix = substr($fileName, strrpos($fileName, '.'));   //从右查找第一次出现.的位置;然后截取。结果为.jpg$uniqueName = uniqid('pic_', true) . $suffix;//尝试生成唯一随机文件名$tempFile = $data['tmp_name'];list($fileName, $uniqueName, $savePath) = $this->saveFile($tempFile, $uniqueName, $fileName);$result = ['file_name' => $fileName,'unique_name' => $uniqueName,'save_path' => $savePath];return $result;}/*** 文件批量上传(可以不传uid参数)* @param $data 文件信息* @param $uid 用户ID(根据实际情况这个参数可以不传)* @return array*/
//    public function uploadMore($data, $uid){public function uploadMore($data){  //不传$uid,使该方法通用//下面这些参数根据实际情况使用$names = $data['name'];$types = $data['type'];$tmpNames = $data['tmp_name'];$errors = $data['error'];$sizes = $data['size'];$result = [];$count = count($names);for ($i = 0; $i < $count; $i++){$error = $errors[$i];if ($error != 0){   //文件上传异常,continuecontinue;}//注意:这里处理文件名重复的情况,要保证文件名唯一//这里先获取原文件名的后缀,然后自定义唯一文件名$fileName = $names[$i];$suffix = substr($fileName, strrpos($fileName, '.'));   //从右查找第一次出现.的位置;然后截取。结果为.jpg$uniqueName = uniqid('pic_', true) . $suffix;//尝试生成唯一随机文件名$tempFile = $tmpNames[$i];list($fileName, $uniqueName, $savePath) = $this->saveFile($tempFile, $uniqueName, $fileName);$result[] = [
//                'uid' => $uid,'file_name' => $fileName,'unique_name' => $uniqueName,'save_path' => $savePath];}return $result;}/*** 文件保存方法* @param $tempFile 临时存放路径* @param $uniqueName 唯一名字,存放到目录中的名字* @param $fileName 原名字* @param string $path 文件存放的目录* @return array*/public function saveFile($tempFile, $uniqueName, $fileName, $path = '/file/use/'){$thinkPath = Env::get('root_path');    //框架应用根目录,命名空间为:use think\facade\Env;$thinkPath = str_replace('\\', '/', $thinkPath);   //把 \\ 替换成 /$savePath = 'public' . $path . date('Y-m-d') . '/';   //文件存放的相对路径(相对应用根目录)$saveDb = $savePath . $uniqueName;//存放到数据表的路径$saveFile = $thinkPath . $saveDb; //文件存放的绝对路径$mkdirPath = $thinkPath . $savePath;if (!is_dir($mkdirPath)){    //文件夹不存在,则创建;并给最大权限 777mkdir($mkdirPath,0777,true);chmod($mkdirPath,0777);}//法一:先复制,再删除原文件
//        copy($tempFile, $saveFile); //把临时存放的文件移动到我们需要保存的目录
//        unlink($tempFile);  //删除缓存的文件//法二:直接移动原文件move_uploaded_file($tempFile, $saveFile);return [ $fileName, $uniqueName, $saveDb ];}
}

五、保存的文件

六、这张图片还不错,分享给大家。

PHP上传文件到项目public路径接口相关推荐

  1. Java上传文件保存到指定路径

    Java上传文件保存到指定路径 上代码 @PostMapping("/file-upload")@ApiOperation(value = "上传swagger.json ...

  2. php自动分配,PHP上传文件时自动分配路径的方法_php技巧

    本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的文件多了,我们就不能放在同一个目录了, ...

  3. php 选择路径上传方法,PHP上传文件时自动分配路径的方法,_PHP教程

    PHP上传文件时自动分配路径的方法, 本文实例讲述了PHP上传文件时自动分配路径的方法.分享给大家供大家参考.具体分析如下: 网站上传文件时,如果是小的企业站,放在一个目录还没问题,当网站大了,上传的 ...

  4. JavaScript 获取上传文件的本地绝对路径

    一直苦恼于在表单提交时获得上传文件的本地绝对路径. 由于javascript是在浏览器环境运行的脚本语言,所以javascript的权限很低,不能操作本地资源,这样的好处是安全性提高了,但是也带来了开 ...

  5. java上传文件到项目路径

    图片目录 前端代码 <!DOCTYPE html> <html lang="zh-cn"> <head><meta charset=&qu ...

  6. 如何设置ftp服务器上传文件夹至不同路径,设置ftp服务器上传文件夹

    设置ftp服务器上传文件夹 内容精选 换一换 上传单个或多个本地文件或文件夹至OBS指定路径.待上传的文件可以是任何类型:文本文件.图片.视频等等.上传本地文件或文件夹时,请确保本地文件或文件夹在上传 ...

  7. php模拟表单,上传文件,解决php对接接口上传图片问题。

    先说几个异常: Required request part 'file' is not present Required request part param is not present Sprin ...

  8. android使用webview上传文件,Android项目中如何在webview页面中上传文件

    Android项目中如何在webview页面中上传文件 发布时间:2020-11-26 15:56:27 来源:亿速云 阅读:68 作者:Leah 本篇文章为大家展示了Android项目中如何在web ...

  9. java上传文件到制定IP路径

    使用jsch-0.1.53.jar JAR包 package cn.com.util;import com.jcraft.jsch.*;import java.io.*;public class Ft ...

  10. ios 微信公众号 上传图片至服务器,axios 上传文件到微信公众号接口提示503错误...

    解决方案如下 import axios from 'axios' import * as fs from 'fs' import { HttpDelegate } from './HttpKit' i ...

最新文章

  1. PowerDesigner打开设计文件后提示failed to read the fileXXX的解决办法
  2. mysql userstat_mysql 中记录用户登录错误日志方法小结
  3. noip模拟赛 Chtholly Nota Seniorious
  4. mysql需要下载调试_Mysql安装和调试
  5. React Native实现一个带筛选功能的搜房列表(2)
  6. mysql lenenc int_MySQL-NonMySQL同步工具源码解读——确定同步位置
  7. BestCoder Round #36 [B] Gunner
  8. vue的matcher_一张思维导图辅助你深入了解 Vue | Vue-Router | Vuex 源码架构
  9. 介绍ML.NET——面向.NET开发人员的机器学习库
  10. php导入导出xls表,TP5.0 PHPExcel 数据表格导出导入
  11. What is DevOps?
  12. 基于微信小程序的AI智能识物
  13. 统计分析软件_强大的多元统计分析软件-Mplus
  14. 货效,坪效,人效,这三效怎么理解?
  15. w3c html验证服务,W3C验证和Vue的HTML绑定语法(W3C Validation and Vue's HTML binding syntax)...
  16. Pytorch使用CPU
  17. Winfrom 常用控件(二)
  18. JustinMind原型制作工具
  19. 解决Git使用出现git@githubcom Permission denied (publickey)
  20. 《中庸》开宗明义:天命之谓性,率性之谓道,修道之谓教。

热门文章

  1. 3811.排列-AcWing题库
  2. ICRA2021会议-----SLAM方向汇总
  3. 4月10日服务器例行维护公告,4月12日服务器例行维护公告(已完成)
  4. linux配置rabbitmq远程登陆,linux配置安装 RabbitMQ详细教程
  5. 什么是分布式查询mysql_基础普及之什么是分布式SQL
  6. php项目部署到linux服务器,thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决...
  7. python123基本统计值计算_基本统计值计算
  8. geohash redis mysql_Redis geohash 地理位置存储
  9. nginx 配置参数说明
  10. Redisson + Lettuce实现