1. 程式人生 > >手機app以資料流格式傳圖片php接受並儲存伺服器

手機app以資料流格式傳圖片php接受並儲存伺服器

今天接到一個任務需要將手機app傳過來的二進位制資料流圖片以檔案格式儲存到伺服器上,這是第一次做這種需求,就度娘一下,看見有些大神一些好了一個image類,就拿下來學習,修改一下應用到專案中。經研究學習發現這個類是可以實現需要的。特在次再做一下說明。

  1. <?php  
  2. /** 
  3.  * 圖片類 
  4.  * @author [email protected] 
  5.  * @version 1.0 
  6.  * 

    PHP預設只識別application/x-www.form-urlencoded標準的資料型別。
    因此,對型如text/xml 或者 soap 或者 application/octet-stream 之類的內容無法解析,如果用$_POST陣列來接收就會失敗!
    故保留原型,交給$GLOBALS['HTTP_RAW_POST_DATA'] 來接收。在手機app傳過來時沒有涉及到瀏覽器所以此處取不到$GLOBALS['HTTP_RAW_POST_DATA'] 。要用 php://input實現。

    另外還有一項 php://input 也可以實現此這個功能

    php://input 允許讀取 POST 的原始資料。和 $HTTP_RAW_POST_DATA 比起來,它給記憶體帶來的壓力較小,並且不需要任何特殊的 php.ini 設定。php://input和 $HTTP_RAW_POST_DATA 不能用於 enctype="multipart/form-data"。

  1.  */  
  2. class image {  
  3.     const ROOT_PATH = './';  
  4.     const FAIL_WRITE_DATA = 'Fail to write data';  
  5.     //沒有資料流  
  6.     const
     NO_STREAM_DATA = 'The post data is empty';  
  7.     //圖片型別不正確  
  8.     const NOT_CORRECT_TYPE = 'Not a correct image type';  
  9.     //不能建立檔案  
  10.     const CAN_NOT_CREATE_FILE = 'Can not create file';  
  11.     //上傳圖片名稱  
  12.     public $image_name;  
  13.     //圖片儲存名稱  此處名稱需要含有後綴名才可實現圖片儲存功能,否則不是圖片。
  14.     public $save_name;  
  15.     //圖片儲存路徑  
  16.     public
     $save_dir;  
  17.     //目錄+圖片完整路徑  
  18.     public $save_fullpath;  
  19.     /** 
  20.      * 建構函式 
  21.      * @param String $save_name 儲存圖片名稱 
  22.      * @param String $save_dir 儲存路徑名稱 
  23.      */  
  24.     public function __construct($save_name$save_dir) {  
  25.         //set_error_handler ( $this->error_handler () );  
  26.         //設定儲存圖片名稱,若未設定,則隨機產生一個唯一檔名  
  27.         $this->save_name = $save_name ? $save_name : md5 ( mt_rand (), uniqid () );  
  28.         //設定儲存圖片路徑,若未設定,則使用年/月/日格式進行目錄儲存  
  29.         $this->save_dir =  $save_dir ? self::ROOT_PATH .$save_dir : self::ROOT_PATH .date ( 'Y/m/d' );  
  30.         //建立資料夾  
  31.         @$this->create_dir ( $this->save_dir );  
  32.         //設定目錄+圖片完整路徑  
  33.         $this->save_fullpath = $this->save_dir . '/' . $this->save_name;  
  34.     }  
  35.     //相容PHP4  
  36.     public function image($save_name) {  
  37.         $this->__construct ( $save_name );  
  38.     }  
  39.     public function stream2Image() {  
  40.         //二進位制資料流  
  41.         $data = file_get_contents ( 'php://input' ) ? file_get_contents ( 'php://input' ) : gzuncompress ( $GLOBALS ['HTTP_RAW_POST_DATA'] );  
  42.         //資料流不為空,則進行儲存操作  
  43.         if (! emptyempty ( $data )) {  
  44.             //建立並寫入資料流,然後儲存檔案  
  45.             if (@$fp = fopen ( $this->save_fullpath, 'w+' )) {  
  46.                 fwrite ( $fp$data );  
  47.                 fclose ( $fp );  
  48.                 $baseurl = "http://" . $_SERVER ["SERVER_NAME"] . ":" . $_SERVER ["SERVER_PORT"] . dirname ( $_SERVER ["SCRIPT_NAME"] ) . '/' . $this->save_name;                  
  49.                 if ( $this->getimageInfo ( $baseurl )) {  
  50.                     echo $baseurl;  
  51.                 } else {  
  52.                     echo ( self::NOT_CORRECT_TYPE  );  
  53.                 }  
  54.             } else {  
  55.             }  
  56.         } else {  
  57.             //沒有接收到資料流  
  58.             echo ( self::NO_STREAM_DATA );  
  59.         }  
  60.     }  
  61.     /** 
  62.      * 建立資料夾 
  63.      * @param String $dirName 資料夾路徑名 
  64.      */  
  65.     public function create_dir($dirName$recursive = 1,$mode=0777) {  
  66.         ! is_dir ( $dirName ) && mkdir ( $dirName,$mode,$recursive );  
  67.     }  
  68.     /** 
  69.      * 獲取圖片資訊,返回圖片的寬、高、型別、大小、圖片mine型別 
  70.      * @param String $imageName 圖片名稱 
  71.      */  
  72.     public function getimageInfo($imageName = '') {  
  73.         $imageInfo = getimagesize ( $imageName );  
  74.         if ($imageInfo !== false) {  
  75.             $imageType = strtolower ( substr ( image_type_to_extension ( $imageInfo [2] ), 1 ) );  
  76.             $imageSize = filesize ( $imageInfo );  
  77.             return $info = array ('width' => $imageInfo [0], 'height' => $imageInfo [1], 'type' => $imageType'size' => $imageSize'mine' => $imageInfo ['mine'] );  
  78.         } else {  
  79.             //不是合法的圖片  
  80.             return false;  
  81.         }  
  82.     }  
  83.     /*private function error_handler($a, $b) { 
  84.         echo $a, $b; 
  85.     }*/  
  86. }  
此篇文章只是用於自己儲存學習,分享一下。不是純原創。 2014.08.14

相關推薦

手機app資料格式圖片php接受儲存伺服器

今天接到一個任務需要將手機app傳過來的二進位制資料流圖片以檔案格式儲存到伺服器上,這是第一次做這種需求,就度娘一下,看見有些大神一些好了一個image類,就拿下來學習,修改一下應用到專案中。經研究學習發現這個類是可以實現需要的。特在次再做一下說明。 <?php  

c#文件圖片

bsp message [] urn pub each bstr attach 異常 1、第一步 定義參數 //主表TableA public class TableA { public List<TableB> AccidentImgByte { get; s

Fiddler抓取手機APP程式資料包--過濾多餘的Sessions

1.下載並安裝Fiddler   下載地址:https://www.telerik.com/download/fiddler 2.設定Fiddler可監聽遠端通訊   前提條件:需要監聽的手機和Fiddler所在的電腦必須在同一個區域網下。   ①點選Tools ——>

蘋果手機(ios)拍照上圖片旋轉90度問題---java後臺處理

需要先匯入包 metadata-extractor-2.3.1.jar 地址 https://github.com/drewnoakes/metadata-extractor/releases?after=2.7.0 xmpcore-5.1.2.jar 依賴包 maven下載 med

百度ueditor後端配置錯誤,未找到上資料,上圖片的完整步驟以及難點問題!

本人因需要編輯功能,自己鑽研加網上找文件,終於弄出了上傳功能。  1  先說原理,不用在後臺建立Action或者controller去接收ueditor上傳的檔案,你只需要設定上傳的路徑,他會自動給你上傳到該目錄下面,非常強大,並且是否帶上Html頭和尾自      需

如何進行手機APP資料爬取?

轉載地址:https://segmentfault.com/a/1190000013439547 平時我們的爬蟲多是針對網頁的,但是隨著手機端APP應用數量的增多,相應的爬取需求也就越來越多,因此手機端APP的資料爬取對於一名爬蟲工程師來說是一項必備的技能。我們知道,網頁爬取的時候我經常使用F1

手機網頁版JS壓縮上圖片--base64位 相容IOS和安卓

首先,我用到了一款外掛,是純JS壓縮上傳外掛,第一次用CSDN,不太會用,我把外掛所有程式碼拷貝在文章末尾。 載入JS外掛<script src="__JS__/dist/lrz.mobile.min.js"></script>

MUI框架開發HTML5手機APP(二)--頁面跳轉值&底部選項卡切換

  概 述 JRedu   在上一篇部落格中,我們學習瞭如何使用Hbuilder建立一個APP,同時如何使用MUI搭建屬於自己的第一款APP,沒有學習的同學可以戳連結學習: http://www.cnblogs.com/jerehedu/p/7832808.html     今天這篇部落格,我們繼續深入學習

php實現curl請求post方式上圖片檔案

在呼叫第三方api介面時,有時會遇到通過http協議上傳圖片,以下是一個微信公眾平臺新增永久素材的例子;php程式碼: /* 使用curl函式 */ $url = "https://api.weixin.qq.com/cgi-bin/material/add_m

android中檔案形式上圖片到後臺

private File tuPian1 ; private File tuPian2 ; @Override protected void onActivityResult(int requestCode, int resultCode, Intent intent) {

angular+ionic 選擇手機相簿,呼叫相機,上圖片

1.安裝外掛 cordova-plugin-image-picker;cordova-plugin-camera;cordova-plugin-file;2.注入 $cordovaImagePicker;3.相簿選擇函式function sheetImg() {var opt

CKEditor 4.10.1 上圖片提示“不正確的伺服器響應” 問題解決

最近專案採用CKEditor 4 富文字編輯器,上傳圖片時提示"不正確的伺服器響應" , 檢視官方文件要求返回json格式,官方示例: Response: File Uploaded Successfully  上傳成功返回: {     "uploaded

java 上圖片至本地 讀取圖片在網頁中顯示

java 上傳圖片至本地 並讀取圖片在網頁中顯示 程式碼+圖片如下所示 一、程式碼 @Controller public class ImageController { private static Logger logger = LoggerFactory.getLogge

在後臺轉換base64格式圖片,讓資料庫存貯伺服器圖片

public String parseContents(String contents) { String newContents=new String(); while (contents.indexOf("data:imag

JAVA 上圖片至阿里OSS儲存

1.建立一個工具類OSSUtil.java,程式碼如下: package com.qyrj.util; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.PutObjectRequest; import java.io.By

Android H5拍照或選擇上圖片+WebApi服務端儲存檔案

H5拍照+H5選照片 <em id="clock_imgs"></em><a href="javascript:captureImage();">選擇圖片</a> <button type="button" id="submit" >

layui 上圖片回顯點選放大實現

1、頁面程式碼佈局 <div class="layui-col-xs12 form-group"> <div class="layui-col-xs6"> <div class="

如何使用.md檔案和如何上圖片到github在README.MD檔案中顯示

.md檔案是markdown的縮寫,Markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的HTML頁面。現在來說說如何編寫.md檔案 #語法解說 1.標題 1.1(用#號的數量來顯示大小)如:

Android端上圖片到後臺,儲存到資料庫中

首先點選頭像彈出popwindow,點選相簿,相機,呼叫手機自帶的裁剪功能,然後非同步任務類訪問伺服器,上傳頭像,儲存到資料庫中, 下面寫出popwindow的程式碼  //設定popwindow public PopupWindow getPopWindow

tp5中上圖片方法,生成相應縮圖的方法

//接收上傳檔案的name$file = $this->_req->file("upload_head_image");//將上傳的檔案移動到public/uploads/user$info = $file->validate(['size'=>524