移動端HTML5實現文件上傳

来源:http://www.cnblogs.com/hutuzhu/archive/2016/03/08/5254532.html
-Advertisement-
Play Games

PC端上傳文件多半用插件,引入flash都沒關係,但是移動端要是還用各種冗餘的插件估計得被噴死,項目裡面需要做圖片上傳的功能,既然H5已經有相關的介面且相容性良好,當然優先考慮用H5來實現。 用的技術主要是: ajax FileReader FormData HTML結構: <div class="


PC端上傳文件多半用插件,引入flash都沒關係,但是移動端要是還用各種冗餘的插件估計得被噴死,項目裡面需要做圖片上傳的功能,既然H5已經有相關的介面且相容性良好,當然優先考慮用H5來實現。

用的技術主要是:

ajax

FileReader

FormData

HTML結構:

<div class="camera-area">
      <form enctype="multipart/form-data" method="post">
        <input type="file" name="fileToUpload" class="fileToUpload" accept="image/*" capture="camera"/>
          <div class="upload-progress"><span></span></div>
        </form>
      <div class="thumb"></div>
  </div>

已經封裝好的upload.js,依賴zepto

(function($) {
  $.extend($.fn, {
    fileUpload: function(opts) {
      this.each(function() {
        var $self = $(this);
        var doms = {
          "fileToUpload": $self.find(".fileToUpload"),
          "thumb": $self.find(".thumb"),
          "progress": $self.find(".upload-progress")
        };
        var funs = {
          //選擇文件,獲取文件大小,也可以在這裡獲取文件格式,限制用戶上傳非要求格式的文件
          "fileSelected": function() {
            var files = (doms.fileToUpload)[0].files;
            var count = files.length;
            for (var index = 0; index < count; index++) {
              var file = files[index];
              var fileSize = 0;
              if (file.size > 1024 * 1024)
                fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB';
              else
                fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB';
            }
            funs.uploadFile();
          },
          //非同步上傳文件
          uploadFile: function() {
            var fd = new FormData();//創建表單數據對象
            var files = (doms.fileToUpload)[0].files;
            var count = files.length;
            for (var index = 0; index < count; index++) {
              var file = files[index];
              fd.append(opts.file, file);//將文件添加到表單數據中
              funs.previewImage(file);//上傳前預覽圖片,也可以通過其他方法預覽txt
            }
            var xhr = new XMLHttpRequest();
            xhr.upload.addEventListener("progress", funs.uploadProgress, false);//監聽上傳進度
            xhr.addEventListener("load", funs.uploadComplete, false);
            xhr.addEventListener("error", opts.uploadFailed, false);
            xhr.open("POST", opts.url);
            xhr.send(fd);
          },
          //文件預覽
          previewImage: function(file) {
            var gallery = doms.thumb;
            var img = document.createElement("img");
            img.file = file;
            doms.thumb.html(img);
            // 使用FileReader方法顯示圖片內容
            var reader = new FileReader();
            reader.onload = (function(aImg) {
              return function(e) {
                aImg.src = e.target.result;
              };
            })(img);
            reader.readAsDataURL(file);
          },
          uploadProgress: function(evt) {
            if (evt.lengthComputable) {
              var percentComplete = Math.round(evt.loaded * 100 / evt.total);
              doms.progress.html(percentComplete.toString() + '%');
            }
          },
          "uploadComplete": function(evt) {
            alert(evt.target.responseText)
          }
        };
        doms.fileToUpload.on("change", function() {
          doms.progress.find("span").width("0");
          funs.fileSelected();
        });
      });
    }
  });
})(Zepto);

調用方法:

$(".camera-area").fileUpload({
        "url": "savetofile.php",
        "file": "myFile"
      });

PHP部分:

<?php
if (isset($_FILES['myFile'])) {
    // Example:
    writeLog($_FILES);
    move_uploaded_file($_FILES['myFile']['tmp_name'], "uploads/" . $_FILES['myFile']['name']);
    echo 'successful';
}
function writeLog($log){
    if(is_array($log) || is_object($log)){
        $log = json_encode($log);
    }
    $log = $log."\r\n";

    file_put_contents('log.log', $log,FILE_APPEND);
}
?>

 點擊這裡下載源碼


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Atitit.atijson 類庫的新特性設計與實現 v3 q31 1. V1版本---集成了多引擎1 2. V2版本新特性 --bsh腳本化2 3. V3版本新特性---迴圈引用解決使用fastjson2 4. prob目前jsonlib庫的存在的問題,2 4.1. 可能版本衝突,拋出ex2 4.
  • Atitit.跨語言 文件夾與文件的io操作集合 草案 1. Jdk原生的太難用了。。1 2. PS: apache commons-io包,FileUtils有相關的方法,IOUtils一般是拷貝文件。1 3. Java raw3 4. 獲取磁碟分區列表 驅動器列表4 5. ref4 1. Jdk
  • 最近一個項目用到Redis做數據緩存,使用Redis最重要的是寫配置文件,那麼要瞭解它的各個配置參數含義,今天整理了一下,發現有些參數不太明白,特貼出來請大家幫忙看看。 daemonize <yes|no>:是否以後臺daemon方式運行 # yes|no (default:no) pidfile
  • 這篇文章主要介紹了正則表達式表單驗證實例詳解的相關資料,大家可以參考下。首先給大家解釋一些符號相關的意義 * 匹配前面的子表達式零次或多次; ^ 匹配輸入字元串的開始位置;$匹配輸入字元串的結束位置 1. /^$/ 這個是個通用的格式。 2. 裡面輸入需要實現的功能。 \d 匹配一個數字字元,等價於...
  • 1 JavaScript中的with語句的作用是為逐級的對象訪問提供命名空間式的速寫方式, 也就是在指定的代碼區域, 直接通過節點名稱調用對象 初次接觸到with用法,是這樣一段代碼: 1 2 3 4 5 6 7 8 9 10 11 12 function validate_email(field,
  • css3背景顏色漸變屬性 相容性測試基礎環境為:windows系統;IE6.0+, Firefox4.0+, Chrome4.0+, Safari4.0+, Opera15.0+ 語法: <linear-gradient>:linear-gradient([ <point>,]? <color-st
  • 通過demo對ECMAScript5中的嚴格模式(StrictMode)進行了學習併列舉出了幾個重要的限制條件
  • 在項目中的問題,之前用的是用IETest測試IE7,8發現背景透明設置無效,後來找文章解決!看了一些資料,做下總結。 幾種IE半透明CSS樣式 IE8里可以這樣寫 -ms-filter:”progid:DXImageTransform.Microsoft.Alpha(opacity=50)”; IE
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...