CodeIgniter+uploadify上傳文件


CI框架中上傳文件的類型有很多,但是有些也沒有,比如這次用到的apk和zip,這個時候如果用框架自帶的文件上傳,就需要設置:

思路:把對應的type加進application/config/mimes.php的數組中

如何確定type:

print_r($_FILES ) ;

Array
(
    [file_name] => Array
        (
            [name] => test.apk
            [type] => application/octet-stream
            [tmp_name] => C:\Users\S-BJ-2J-021\AppData\Local\Temp\php5FBF.tmp
            [error] => 0
            [size] => 32
        )
)

就是我們要獲取的type,將他添加到mimes.php中即可[type] => application/octet-stream

'apk'   => 'application/octet-stream'
'zip'   => array('application/x-zip', 'application/zip', 'application/x-zip-compressed', 'application/s-compressed', 'multipart/x-zip','application/octet-stream'),//zip中可能需要追加最後一個


CI傳輸過程中,可能會出現

You did not select a file to upload
確定很久問題,最終是配置文件大小的問題:
需要在php.ini 中修改這兩個值:
upload_max_filesize
post_max_size
或者,在.htaccess中配置
php_value post_max_size 128M
php_value upload_max_filesize 128M

貼代碼:

upload.php

<input type="file" id="file_upload"   size="20" />
<div id="progress"></div>
<a href="javascript:$('#file_upload').uploadify('upload','*')">上傳文件</a><br>


<script src="/dist/js/jquery.min.js" type="text/javascript"></script>
<script src="/dist/uploadify/jquery.uploadify.min.js" type="text/javascript"></script>
<link rel="stylesheet" href="/dist/uploadify/uploadify.css" type="text/css">

<script>
    $(function() {
        $("#file_upload").uploadify({
            'buttonClass' : 'some-class',
            'buttonText' : '選擇文件...',
            'auto':false,//是否立即上傳
            'progressData' : 'percentage',
            'swf'         : '/dist/uploadify/uploadify.swf',
            'uploader'    : '/item/do_upload',//請求路徑
            //'debug':true,//調試模式是否開啓
            'fileObjName':'file_name',//文件對象的名稱,與CI控制器的,<span style="font-family: 'Source Code Pro'; font-size: 11.3pt; color: rgb(102, 0, 0); background-color: rgb(247, 250, 255);">$this</span><span style="font-family: 'Source Code Pro'; font-size: 11.3pt; background-color: rgb(247, 250, 255);">-></span><span style="font-family: 'Source Code Pro'; font-size: 11.3pt; color: rgb(102, 14, 122);  background-color: rgb(247, 250, 255);"><strong>upload</strong></span><span style="font-family: 'Source Code Pro'; font-size: 11.3pt; background-color: rgb(247, 250, 255);">->do_upload(</span><span style="font-family: 'Source Code Pro'; font-size: 11.3pt; color: rgb(0, 128, 0);  background-color: rgb(247, 250, 255);"><strong>'file_name'</strong></span><span style="font-family: 'Source Code Pro'; font-size: 11.3pt; background-color: rgb(247, 250, 255);">)名,一致</span>
            'fileTypeExts':'*.apk;*.zip',//設置可以選擇的文件類型
            'removeCompleted':false,//是否將已完成任務從隊列中刪除
              'onUploadSuccess' : function(file, data, response) {
                 alert('文件 ' + file + ' 上傳成功.詳細信息: ' + response+data);
            },
        });
    });
</script>

controller中文件

 //上傳類配置
        $this->load->library('upload');
        $config['upload_path']      = './uploads';
        
        $config['allowed_types']    = 'apk|zip';
        $this->upload->initialize($config);

        //是否獲取到上傳文件
        if ( ! $this->upload->do_upload('file_name'))
        {
            echo json_encode(array('code'=>'-1','status'=>$this->upload->display_errors()));
            exit;
        }

        $data = array('upload_data' => $this->upload->data());



此處採用通過ajax控制數據

此處貼大神整理的配置文件一份

一、屬性
屬性名稱默認值說明
autotrue設置爲true當選擇文件後就直接上傳了,爲false需要點擊上傳按鈕才上傳 。
buttonClass按鈕樣式
buttonCursor‘hand’鼠標指針懸停在按鈕上的樣子
buttonImagenull瀏覽按鈕的圖片的路徑 。
buttonText‘SELECT FILES’瀏覽按鈕的文本。
checkExistingfalse文件上傳重複性檢查程序,檢查即將上傳的文件在服務器端是否已存在,存在返回1,不存在返回0
debugfalse如果設置爲true則表示啓用SWFUpload的調試模式
fileObjName‘Filedata’文件上傳對象的名稱,如果命名爲’the_files’,PHP程序可以用$_FILES['the_files']來處理上傳的文件對象。
fileSizeLimit0

上傳文件的大小限制 ,如果爲整數型則表示以KB爲單位的大小,如果是字符串,則可以使用(B, KB, MB, or GB)爲單位,比如’2MB’;

如果設置爲0則表示無限制

fileTypeDesc‘All Files’這個屬性值必須設置fileTypeExts屬性後纔有效,用來設置選擇文件對話框中的提示文本,如設置fileTypeDesc爲“請選擇rar doc pdf文件”
fileTypeExts‘*.*’設置可以選擇的文件的類型,格式如:’*.doc;*.pdf;*.rar’ 。
formData JSON格式上傳每個文件的同時提交到服務器的額外數據,可在’onUploadStart’事件中使用’settings’方法動態設置。
height30設置瀏覽按鈕的高度 ,默認值
itemTemplatefalse用於設置上傳隊列的HTML模版,可以使用以下標籤: instanceID – Uploadify實例的ID fileID – 列隊中此文件的ID,或者理解爲此任務的ID fileName – 文件的名稱 fileSize – 當前上傳文件的大小插入模版標籤時使用格式如:${fileName}
methodPost提交方式Post或Get
multitrue設置爲true時可以上傳多個文件。
overrideEvents 設置哪些事件可以被重寫,JSON格式,如:’overrideEvents’ : ['onUploadProgress']
preventCachingtrue如果爲true,則每次上傳文件時自動加上一串隨機字符串參數,防止URL緩存影響上傳結果
progressData‘percentage’設置上傳進度顯示方式,percentage顯示上傳百分比,speed顯示上傳速度
queueIDfalse設置上傳隊列容器DOM元素的ID,如果爲false則自動生成一個隊列容器。
queueSizeLimit999隊列最多顯示的任務數量,如果選擇的文件數量超出此限制,將會出發onSelectError事件。注意此項並非最大文件上傳數量,如果要限制最大上傳文件數量,應設置uploadLimit。
removeCompletedtrue是否自動將已完成任務從隊列中刪除,如果設置爲false則會一直保留此任務顯示。
removeTimeout3如果設置了任務完成後自動從隊列中移除,則可以規定從完成到被移除的時間間隔。
requeueErrorsfalse如果設置爲true,則單個任務上傳失敗後將返回錯誤,並重新加入任務隊列上傳。
successTimeout30文件上傳成功後服務端應返回成功標誌,此項設置返回結果的超時時間
swf‘uploadify.swf’uploadify.swf 文件的相對路徑。
uploaderuploadify.php後臺處理程序的相對路徑。
uploadLimit999最大上傳文件數量,如果達到或超出此限制將會觸發onUploadError事件。
width120設置文件瀏覽按鈕的寬度。

 

二、事件
事件名稱說明
onCancel(file)

當點擊文件隊列中文件的關閉按鈕或點擊取消上傳時觸發,file參數爲被取消上傳的文件對象

onClearQueue(queueItemCount)當調用函數cancel方法時觸發,queueItemCount參數爲被取消上傳的文件數量。
onDestroy()當destory方法被調用時觸發
onDialogClose(queueData)

當文件瀏覽框關閉時觸發,如果將此事件被重寫,則當向隊列添加文件上傳出錯時不會彈出錯誤消息提示。

queueData對象包含如下屬性:

  • filesSelected 文件選擇對話框中共選擇了多少個文件
  • filesQueued 已經向隊列中添加了多少個文件
  • filesReplaced 已經向隊列中替換了多少個文件
  • filesCancelled 取消了多少個文件 filesErrored 出錯了多少個文件
onDialogOpen()當文件選擇對話框彈出時立即出發,但可能在文件選擇對話框被關閉之前並不能全部執行。
onDisable()當disable方法禁用Uploadify上傳按鈕時被調用時觸發。
onEnable()當disable方法啓用Uploadify上傳按鈕時被調用時觸發。
onFallback()當Uploadify初始化過程中檢測到當前瀏覽器不支持flash時觸發。
onInit()首次初始化Uploadify結束時觸發。
onQueueComplete(queueData)

文件上傳隊列處理完畢後觸發。

queueData對象包含如下屬性:

  • uploadsSuccessful – 上傳成功的文件數量
  • uploadsErrored – 上傳失敗的文件數量
onSelect(file)

選擇文件後向隊列中添加每個上傳任務時都會觸發。

onSelectError(file, errorCode, errorMsg)

選擇文件後向隊列中添加每個上傳任務時如果失敗都會觸發。

file – 文件對象

errorCode – 錯誤代碼如下:

  • QUEUE_LIMIT_EXCEEDED – 任務數量超出隊列限制;
  • FILE_EXCEEDS_SIZE_LIMIT – 文件大小超出限制;
  • ZERO_BYTE_FILE – 文件大小爲0
  • INVALID_FILETYPE – 文件類型不符合要求

errorMsg – 錯誤提示,可通過’this.queueData.errorMsg’定製

onSWFReady()Flash文件載入成功後觸發。
onUploadComplete(file)每個文件上傳完畢後無論成功與否都會觸發。
onUploadError(file, errorCode, errorMsg, errorString)文件上傳出錯時觸發,參數由服務端程序返回。
onUploadProgress(file, bytesUploaded, bytesTotal, totalBytesUploaded, totalBytesTotal)

處理上傳隊列的過程中會多次觸發此事件,每當任務狀態有更新時都會觸發。

  • file – 文件對象
  • bytesUploaded – 已上傳的字節數
  • bytesTotal – 文件總字節數
  • totalBytesUploaded – 當前任務隊列中全部文件已上傳的總字節數
  • totalBytesTotal – 當前任務隊列中全部文件的總字節數
onUploadStart(file)當文件即將開始上傳時立即觸發
onUploadSuccess(file, data, response)

當文件上傳成功時觸發

  • file – 文件對象
  • data – 服務端輸出返回的信息
  • response – 有輸出時爲true,如果無響應爲false,如果返回的是false,當超過successTimeout設置的時間後假定爲true
三、方法
方法名稱說明應用舉例
cancel(fileID, suppressEvent)

取消隊列中的任務,不管此任務是否已經開始上傳

  • fileID – 要取消的文件ID,如果爲空則取消隊列中第一個任務,如果爲’*'則取消所有任務
  • suppressEvent – 是否阻止觸發onUploadCancel事件,當清空隊列時非常實用。

<a href="javascript:$(‘#file_upload’).uploadify(‘cancel’)">取消第一個</a>

<a href="javascript:$(‘#file_upload’).uploadify(‘cancel’, ‘*’)">清空隊列</a>

<a href="javascript:$(‘#file_upload’).uploadify(‘upload’, ‘*’)">開始上傳所有任務</a>

destroy()銷燬Uploadify實例並將文件上傳按鈕恢復到原始狀態<a href="javascript:$(‘#file_upload’).uploadify(‘destroy’)">銷燬Uploadify實例</a>
disable(setDisabled)

禁用或啓用文件瀏覽按鈕

setDisabled – 設置爲true表示禁用,false爲啓用

<a href="javascript:$(‘#file_upload’).uploadify(‘disable’, true)">禁用按鈕</a>

<a href="javascript:$(‘#file_upload’).uploadify(‘disable’, false)">啓用按鈕</a>

settings(name, value, resetObjects)

獲取或設置Uploadify實例參數

  • name – 屬性名稱,如果只提供屬性名稱則表示獲取其值
  • value – 屬性值
  • resetObjects – 設置爲true時,更新postData對象將清空現有的值。否則,新的值將被添加到其末尾。

$(‘#file_upload’).uploadify(‘settings’,'buttonText’,'BROWSE’);

$(‘#file_upload’).uploadify(‘settings’,'buttonText’));

stop()停止當前正在上傳的任務

<a href="javascript:$(‘#file_upload’).uploadify(‘upload’, ‘*’)">開始上傳</a>

<a href="javascript:$(‘#file_upload’).uploadify(‘stop’)">停止上傳</a>

upload(fileID)立即上傳指定的文件,如果fileID爲’*'表示上傳所有文件,要指定上傳多個文件,則將每個文件的fileID作爲一個參數<a href="javascript:$(‘#file_upload’).uploadify(‘upload’,'*’)">開始上傳所有文
配置文檔摘自:http://blog.sina.com.cn/s/blog_5079086b0101fkmh.html







Flash的插件,問題還是比較客觀的,一個HTTP302鬱悶了我一下午,最終換成了HTML5 uploadify

此處貼個網址

http://www.cnblogs.com/lvdabao/p/3452858.html




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章