PHP 圖片上傳 (AIP圖片上傳介面,視訊上傳同理,只需改動jpg,png等為mp4,flv等)
PHP上傳的簡單案例:
Html檔案:
<html> <form action="index.php" name="form" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" name="submit" value="上傳" /> </form> </html>
樣式相關:
手機端,點選上傳按鈕,彈出相機:
<input type="file" accept="image/*;capture=camera">直接呼叫相機
<input type="file" accept="image/*" />呼叫相機 圖片或者相簿
PHP檔案:
<?php $file = $_FILES['file'];//得到傳輸的資料 //得到檔名稱 $name = $file['name']; $type = strtolower(substr($name,strrpos($name,'.')+1)); //得到檔案型別,並且都轉化成小寫 $allow_type = array('jpg','jpeg','gif','png'); //定義允許上傳的型別 //判斷檔案型別是否被允許上傳 if(!in_array($type, $allow_type)){ //如果不被允許,則直接停止程式執行 return ; } //判斷是否是通過HTTP POST上傳的if(!is_uploaded_file($file['tmp_name'])){ //如果不是通過HTTP POST上傳的 return ; } $upload_path = "./img/"; //上傳檔案的存放路徑 //開始移動檔案到相應的資料夾 if(move_uploaded_file($file['tmp_name'],$upload_path.$file['name'])){ echo "Successfully!"; }else{ echo "Failed!"; } ?>
使用thinkphp上傳類上傳的簡單案例:
// 上傳配置資訊 protected$upconfig = array( 'maxSize' => 3145728, // 3M 'exts' => array('jpg', 'gif', 'png', 'jpeg'), 'rootPath' => './Public/Uploads/info/', 'savePath' => '', // => 上傳子目錄需要每個函式自己去設定 'saveName' => array('uniqid',''), 'autoSub' => false, // 關閉子目錄儲存 'subName' => array('date','Ymd'), ); protected function upload($file) { $res['result'] = 1; $res['imgurl'] = ''; $res['msg'] = ''; do { $ret = true; //判斷路徑是否存在 $fullPath = $this->upconfig['rootPath'] . $this->upconfig['savePath']; if(!file_exists($fullPath)){ //如果不存在,建立資料夾 $ret = mkdir($fullPath, 0777, true); } if(!$ret) { // 上傳錯誤提示錯誤資訊 $res['result'] = 0; $res['msg'] = "建立儲存圖片的路徑失敗!"; break; } // 例項化上傳類 $upload = new \Think\Upload($this->upconfig); // 上傳單個檔案 $info = $upload->uploadOne($file); // 上傳多個檔案$info = $upload->upload();
if(!$info) { // 上傳錯誤提示錯誤資訊 $res['result'] = 0; $res['msg'] = $upload->getError(); } else { // 上傳成功 獲取上傳檔案資訊 $imgurl = $this->upconfig['rootPath'] . $info['savepath'].$info['savename']; $imgurl = str_replace('./', '/', $imgurl); $res['result'] = 1; $res['imgurl'] = $imgurl; } } while(0); return $res; } // 儲存上傳的檔案 $res = $this->upload($_FILES['attorney']);
移動端App上傳圖片例項:API介面:
問題:APP上傳頭像,php作為API端應該如何接收圖片資訊?
上傳部分的程式碼不是問題,主要是server端如何才能接收到APP端的圖片資訊。在B/S架構下,可以直接通過form表單設定enctype="multipart/form-data",$_FILES陣列中就有了圖片資訊。那麼在C/S模式中,也是如此嗎?解答1(見方式一): 一般是採用二進位制流傳輸,客戶端傳的是二進位制,伺服器端接收,然後file_put_contents寫入檔案就可以了。檔名格式,檔案放哪裡,這些自己定義。
解答2(見方式二):Android或者IOS客戶端模擬一個HTTP的Post請求到伺服器端,伺服器端接收相應的Post請求後(通過$_FILES獲取圖片資源),返回響應資訊給給客戶端。(這一種方式和獲取Html方式提交的方法一樣)
方式一:把圖片進行base64加密成字串,進行傳輸
說明:IOS或者安卓端:通過把圖片進行base64編碼得到字串,傳給介面
介面端:把接收的字串進行base64解碼,再通過file_put_contents函式,上傳到指定的位置
/** * 圖片上傳 * @param $imginfo - 圖片的資源,陣列型別。['圖片型別','圖片大小','圖片進行base64加密後的字串'] * @param $companyid - 公司id * @return mixed */ public function uploadImage( $imginfo , $companyid ) { $image_type = strip_tags($imginfo[0]); //圖片型別 $image_size = intval($imginfo[1]); //圖片大小 $image_base64_content = strip_tags($imginfo[2]); //圖片進行base64編碼後的字串 $upload = new UploaderService(); $upconfig = $upload->upconfig; if(($image_size > $upconfig['maxSize']) || ($image_size == 0)) { $array['status'] = 13; $array['comment'] = "圖片大小不符合要求!"; return $array; } if(!in_array($image_type,$upconfig['exts'])) { $array['status'] = 14; $array['comment'] = "圖片格式不符合要求!"; return $array; } // 設定附件上傳子目錄 $savePath = 'bus/group/' . $companyid . '/'; $upload->upconfig['savePath'] = $savePath; //圖片儲存的名稱 $new_imgname = uniqid().mt_rand(100,999).'.'.$image_type; //base64解碼後的圖片字串 $string_image_content = base64_decode($image_base64_content); // 儲存上傳的檔案 $array = $upload->upload($string_image_content,$new_imgname); return $array; }
// 上傳配置資訊 public $upconfig = array( 'maxSize' => 3145728, //3145728B(位元組) = 3M 'exts' => array('jpg', 'gif', 'png', 'jpeg'), // 'rootPath' => './Public/Uploads/info/', 'rootPath' => 'https://www.eyuebus.com/Public/Uploads/info/', ); /** * @param $string_image_content - 所要上傳圖片的字串資源 * @param $new_imgname - 圖片的名稱,如:57c14e197e2d1744.jpg * @return mixed */ public function upload($string_image_content,$new_imgname) { $res['result'] = 1; $res['imgurl'] = ''; $res['comment'] = ''; do { $ret = true; $fullPath = $this->upconfig['rootPath'] . $this->upconfig['savePath']; if(!file_exists($fullPath)){ $ret = mkdir($fullPath, 0777, true); } if(!$ret) { // 上傳錯誤提示錯誤資訊 $res['result'] = 12; $res['comment'] = "建立儲存圖片的路徑失敗!"; return $res; break; } //開始上傳 if (file_put_contents($fullPath.$new_imgname, $string_image_content)){ // 上傳成功 獲取上傳檔案資訊 $res['result'] = 0; $res['comment'] = "上傳成功!"; $res['imgname'] = $new_imgname; }else { // 上傳錯誤提示錯誤資訊 $res['result'] = 11; $res['comment'] = "上傳失敗!"; } } while(0); return $res; }
方式二:Android或者IOS客戶端模擬一個HTTP的Post請求到伺服器端,伺服器端接收相應的Post請求後(通過$_FILES獲取圖片資源),返回響應資訊給給客戶端。(這一種方式和獲取Html方式提交的方法一樣)
移動端需要請求一個URL,這個URL接收POST過去的資料,比如:http://www.apixxx.net/Home/Uploader/uploadPrepare
public function uploadPrepare() { $array = array(); $post_log = print_r($_POST, true); Log::record($post_log, 'DEBUG'); $file_log = print_r($_FILES, true); Log::record($file_log, 'DEBUG'); $token = $_POST['token']; $token_str = jwt_decode($token); $user_type = $token_str['user_type']; // 設定附件上傳子目錄 if($user_type == 1) { $savePath = 'travel/group/' . $user_companyid . '/'; }elseif ($user_type == 2) { $savePath = 'bus/group/' . $user_companyid . '/'; }elseif ($user_type == 3) { $savePath = 'driver/group/' . $user_companyid . '/'; }else { $array['status'] = 3; $array['comment'] = '非法使用者!'; return $array; } $this->upconfig['savePath'] = $savePath; // 儲存上傳的檔案(單張) // $res = $this->upload($_FILES['file']); // 儲存上傳的檔案(多張) 移動端的表單name=“xxx[]”,支援多張圖片 $res = $this->upload(); $array['status'] = $res['status']; $array['comment'] = $res['comment']; $array['responseParameters']['img_url'] = $res['img_url']; echo json_encode($array); } protected function upload() { $res['status'] = 1; $res['imgurl'] = ''; $res['comment'] = ''; do { $ret = true; $fullPath = $this->upconfig['rootPath'] . $this->upconfig['savePath']; if(!file_exists($fullPath)){ $ret = mkdir($fullPath, 0777, true); } if(!$ret) { // 上傳錯誤提示錯誤資訊 $res['status'] = 1; $res['comment'] = "建立儲存圖片的路徑失敗!"; break; } // 例項化上傳類 $upload = new \Think\Upload($this->upconfig); // // 上傳單個檔案 // $info = $upload->uploadOne($file); // 上傳多個檔案 $infos = $upload->upload(); // 上傳的圖片數量 $file_count = 0; foreach ($_FILES as $file_k => $file_v) { foreach ($file_v["size"] as $k => $v) { if($v == 0) { continue; } $file_count += 1; } } Log::record("info_log", 'DEBUG'); $info_log = print_r($infos,true); Log::record($info_log, 'DEBUG'); if(!$infos) { // 上傳錯誤提示錯誤資訊 $res['status'] = 2; $res['comment'] = $upload->getError(); } else { // 獲取的上傳成功的圖片數量 $info_count = 0; // 上傳成功 獲取上傳檔案資訊 foreach($infos as $k => $v) { $imgurl[$v['key']][] = str_replace('./', '/', $this->upconfig['rootPath'] . $v['savepath'].$v['savename']); $info_count += 1; } if($file_count != $info_count) { $res['status'] = 1; $res['comment'] = "上傳失敗!上傳的多張圖片,沒有全部上傳成功"; }else { $res['status'] = 0; $res['comment'] = "上傳成功!"; $res['img_url'] = $imgurl; } } } while(0); return $res; }
題外話,若伺服器有過多的類似這樣上傳,下載的請求,可使用nginx,nginx相比於apache,可處理的併發請求更多.具體可自行研究
友情提示:image/png image/meg video/mp4 video/flv....
更多問題,歡迎加群討論:qq群 :565191947
相關推薦
PHP 圖片上傳 (AIP圖片上傳介面,視訊上傳同理,只需改動jpg,png等為mp4,flv等)
PHP上傳的簡單案例: Html檔案:<html> <form action="index.php" name="form" method="post" enctype="multipart/form-data"> <input ty
PHPCMS V9手機移動端圖片上傳(PHPCMS V9前臺使用layui的上傳元件代替預設的SWFupload上傳圖片)
預設phpcms的上傳 圖片使用的是swfupload,導致手機移動端上傳圖片無法使用。這裡我們使用layui的上傳元件來使其支援手機移動端圖片上傳,效果圖如下: 實現步驟: 一、 開啟phpcms
AJAX+Servlet3.0實現非同步檔案上傳(單個檔案、多個檔案上傳、帶檔案的表單提交)
一、上傳單個檔案 1.JSP頁面程式碼 <%@ page language="java" contentType="text/html;
壓縮圖片的方法(壓縮圖片的質量)
/** * 多執行緒壓縮圖片的質量 * @param image 記憶體中的圖片 * @param imgPath 圖片的儲存路徑 */ private void compressImage(final Bit
定義抽象類Shape,抽象方法為showArea(),求出面積並顯示,定義矩形類Rectangle,正方形類Square,圓類 Circle,根據各自的屬性,用showArea方法求出各自的面積,在main方法中構造3個對象,調用showArea方法。(體現多態)
子類 protected new 都是 package 使用 類指針 3.1 shape 實現多態的三個條件:1.要有繼承2.要有抽象方法重寫3.用父類指針(引用)指向子類對象 重載重寫重定義的區別: 1.重載:在同一個類中進行; 編譯時根據參數類型和個數決定方法調用;
給年份year,定義一個巨集,以判別該年份是否閏年。提示:巨集名可以定義為LEAP_YEAR,形參為y,既定義巨集的形式為 #define LEAP_YEAR(y) (讀者設計的字串)
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int y=scanner.nextI
CF E. Vasya and a Tree】 dfs+樹狀陣列(給你一棵n個節點的樹,每個點有一個權值,初始全為0,m次操作,每次三個數(v, d, x)表示只考慮以v為根的子樹,將所有與v點距離小於等於d的點權值全部加上x,求所有操作完畢後,所有節點的值)
題意: 給你一棵n個節點的樹,每個點有一個權值,初始全為0,m次操作,每次三個數(v, d, x)表示只考慮以v為根的子樹,將所有與v點距離小於等於d的點權值全部加上x,求所有操作完畢後,所有節點的值 首先要明確兩件事情性質1.每個人的操作只會影響到他的子孫(包括自己) 性質1.每個人的操
Android Multimedia實戰(四)MediaProjection實現截圖,與MediaMuxer實現錄屏為MP4,Gif格式
MediaProjection可以用來捕捉螢幕,具體來說可以擷取當前螢幕和錄製螢幕視訊 (5.0以上) 先總結下系統是如何實現組合鍵截圖的: 都應該知道Android原始碼中對按鍵的捕獲位於檔案PhoneWindowManager.java中 當滿足按鍵
佇列用連結串列實現(建立,插入新元素,刪除元素,讀取元素,全部刪除,全部讀出,判斷是否為空,清空)
下午把佇列的各種操作用連結串列實現了一下,建立,插入元素,刪除元素,讀取元素,全部刪除,全部讀出,判斷是否為空,清空,原始碼除錯已經通過,執行結果如下圖所示: #include "iostream" using namespace std; typedef struct
手把手教你基於SqlSugar4編寫一個視覺化程式碼生成器(生成實體,以SqlServer為例,文末附原始碼)
在開發過程中免不了建立實體類,欄位少的表可以手動編寫,但是欄位多還用手動建立的話不免有些浪費時間,假如一張表有100多個欄位,手寫有些不現實。 這時我們會藉助一些工具,如:動軟程式碼生成器、各種ORM框架自帶的程式碼生成器等等,都可以使用。 我們現在就基於SqlSugar(ORM框架)自己動手製造一個輪子
PHP+jQuery+Ajax單(多)圖片上傳
近日寫的一個銷售管理系統中,需要使用者上傳產品的圖片,找了好多外掛,用起來都挺麻煩的而且還不好改,最後找到一篇用php和ajax做圖片上傳的,感覺程式碼挺簡單的而且改起來很容易,轉發到此處與各位分享一下: 我們在本文中用到一個Ajax表單提交外掛:jqery.
springmvc圖片上傳(兼容ie8以上,實時預覽)
處理 spa aps news time htm tip 技術分享 ans html代碼: <form id="uploadform" method="post" enctype="multipart/form-data"> <
ASP.NET Core 簡單實現七牛圖片上傳(FormData 和 Base64)
private stream public 圖片 ASP.NET Core 簡單實現七牛圖片上傳(FormData 和 Base64)七牛圖片上傳 SDK(.NET 版本):https://developer.qiniu.com/kodo/sdk/1237/csharpUpoladServic
spring實現文件上傳(圖片解析)
handle exc 所有 sub str [] sys script ota 合抱之木,生於毫末,千裏之行,始於足下,要想了解spring的文件上傳功能,首先要知道spring是通過流的方式將文件進行解析,然後上傳。那麽是不是所有需要用的文件上傳的地方都要寫一遍文件解析器
HTML5+Canvas+jQuery調用手機拍照功能實現圖片上傳(二)
customer mkdir 狀態保存 ont false lan else if 項目 action 上一篇僅僅講到前臺操作,這篇專門涉及到Java後臺處理。前臺通過Ajax提交將Base64編碼過的圖片數據信息傳到Java後臺,然後Java這邊進行接收處理。通過
HTML5 file API加canvas實現圖片前端JS壓縮並上傳 (轉載)
www. 手機 回調 pre lan 瀏覽器中 rdp 效果 二進制 一、圖片上傳前端壓縮的現實意義 對於大尺寸圖片的上傳,在前端進行壓縮除了省流量外,最大的意義是極大的提高了用戶體驗。 這種體驗包括兩方面: 由於上傳圖片尺寸比較小,因此上傳速度會比較快,交互會更
公眾號調用微信上傳圖片接口(商品評論的圖片)
微信 公眾號 圖片接口 <body> <div> <input type="button" value="頭像" onclick="chooseImage()"/> <div >
使用Ueditor上傳圖片到圖片服務器(二)
java tpc linux 是我 jsp 使用 其他 div .cn 上一篇主要寫了前端部分如何配置ueditor的上傳路徑,已經jsp頁面中如何使用ueditor的編輯器功能以及如何配置單獨的圖片上傳功能。 這一篇,我分兩部分:第一部分是搭建圖片服務器以及配置ftp上傳
node.js實現圖片上傳(包含縮略圖)
http close path return new tde log img thumb 圖片上傳 使用multiparty插件實現上傳 安裝multiparty npm i --save multiparty 代碼實現 const multiparty = requi
接口自動化實現圖片上傳(selenium/RF)
herf ict 上傳圖片 帶圖片 amp 怎麽 top .get imp 最近做自動化碰到一個問題: 就是帶圖片上傳的不知道怎麽實現自動化:整理了下實現如下: 上傳圖片postman 結果請求如下,上傳圖片後返回一個圖片地址: post請求 body 是form-da