swfupload是一個用來文件上傳的組件,對於大文件我們覺得是很不錯的,下面我來介紹swfupload配置與使用方法吧。
swfupload對於大文件上傳等比較好用,下面以classic form demo為例,簡單說明下用法
下載地址:http://code.google.com/p/swfupload/downloads/list
其中 SWFUpload_v250_beta_3_samples.zip 為實例代碼,解壓後重命名為swfupload,保存到本地主文件夾(nginx+php環境)下,便可以通過
http://localhost/swfupload/demos/ 訪問
其中兩個文件夾,demos 為客戶端的實例,samples 提供了各語言的文件保存代碼。
切換到 http://localhost/swfupload/demos/formsdemo/ 即普通表單模式
在/demos/formsdemo/下新建文件夾 uploads
將 /smaples/php/upload.php 中的代碼拷貝到 /demos/formsdemo/upload.php 開頭,即
// The Demos don't save files
這個注釋下面。
修改其中的
代碼如下 復制代碼view sourceprint?$upload_name = "filedata";
為:
view sourceprint?$upload_name = "resume_file";
(與/demos/formsdemo/index.php中的表單元素名稱一致)
此時,可以使用表單正常上傳文件,上傳的文件保存在/demos/formsdemo/uploads/目錄下
數據庫處理部分,應修改下面的代碼:
代碼如下 復制代碼
if (isset($_FILES["resume_file"]) && is_uploaded_file($_FILES["resume_file"]["tmp_name"]) && $_FILES["resume_file"]["error"] == 0) {
echo rand(1000000, 9999999); // Create a pretend file id, this might have come from a database.
}
這段代碼是原來demo中的upload,其作用時返回一個已經上傳的文件的id並賦給表單的hidFileID標簽(注意到,這個標簽是一個hidden元素)
原demo是隨機產生的一個數,在這要修改為數據庫插入操作得到的一個數據庫表的id值。即下面的做法:
去掉對$_FILES的if判斷(這在上面的move_uploaded_file之後is_uploaded_file判斷為false);進行數據庫插入操作;直接echo得到的id(數字型)。
對於大文件上傳,需要首先修改表單部分的,即
代碼如下 復制代碼/demos/formsdemo/index.php中
view sourceprint?file_size_limit : "100 MB",
修改為期待的尺寸(最大2G)
修改nginx.conf,/etc/init.d/nginx reload,若不添加下面的設置,則nginx會出現413 Request Entity Too Large錯誤
代碼如下 復制代碼view sourceprint?http {
...
client_max_body_size 128M
...
}
同時需要修改服務器配置 php.ini, /etc/init.d/php-cgi reload
代碼如下 復制代碼view sourceprint?upload_max_filesize 100M
post_max_size 100M
memory_limit 128M
注意到swfupload並不要求修改max_execution_time和max_input_time的配置。