kingedit 上傳php_php文件上傳下載實例(實現最簡單的網盤功能)

本人是一個新手代碼狗,第一次發表博客,歡迎大大們指點!

最近手頭有一個文件上傳下載的案例,跟大家一起分享一下作為一個新手的苦逼成長歷程!

話不多說,先上代碼:

一:這個是一個文件上傳的html頁面,小博做的是上傳圖片(gif、png和jpg格式,200KB以內);

初稿做的是單一上傳,后來改成的批量上傳,在input中將name的名字從file改成file[],然后加上multiple=“multiple”就可以了(選擇上傳文件時可以使用鼠標或者鍵盤進行批量選擇);

其實一開始小博是傻傻的用了N個input框進行上傳的!= =。

二:圖片的后臺處理;

{mkdir("./pic");

}$file=$_FILES['file'];//獲取傳輸文件數組;

foreach($file["name"] as $valuename){ //遍歷文件['name數組'];得到字符串:1.png.2.png.3.png.;

$value.=$valuename.".";

};$strr=substr($value,0,strlen($value)-1); //字符串更新:1.png.2.png.3.png(去掉最后一個.);

$strarr=explode(".", $strr); //獲得數組如:arr(1,png,2,png,3,png,4,png);

$filetypearr=[];foreach($strarr as $key=>$valuea){if($valuea!=""){ //去掉上傳過來的空值;

if($key%2!=0){$filetypearr[]=$valuea; //獲得新數組,如:arr(png,png,png);

}

}

}$typearr=array("png","jpg","gif"); //可上傳類型數組

function checktype($typearr,$type){ //判斷類型方法;

foreach($typearr as $value){if($value==$type){return true;

}

}return false;

}foreach($filetypearr as $key=>$valueb){ //判斷格式類型是否正確;

if(!checktype($typearr,$valueb)){echo "";header("Refresh:0.1;url=piliangfile.html");exit;

}

}for($i=0;$i1024*200){ //判斷文件大小是否符合,如果文件過大會提示該文件,符合的文件會繼續上傳,不符合的文件不上傳;

echo "";header("Refresh:0.1;url=picscan.php");

}else{ //存儲文件,并跳轉到文件展示頁面;

move_uploaded_file($file['tmp_name'][$i], "pic/".$file["name"][$i]);header("Refresh:0.1;url=picscan.php");

}

}?>

小博在實際過程中對于文件名符合類型但是大小過大的文件實行攔截,其他符合的會先一步上傳。(但是如果上傳的文件類型中有不符合的,批量上傳會中斷,沒有文件上傳);

三:文件展示頁面(主頁面)

ini_set('date.timezone','Asia/Shanghai'); //時區設置,東八區上海時間;

function format_bytes($size) { //文件大小轉換方法(字節轉換為KB,MB,GB,TB);

$units = array(' B', ' KB', ' MB', ' GB', ' TB');for ($i = 0; $size >= 1024 && $i < 4; $i++) $size /= 1024;return round($size, 2).$units[$i];

}?>

序號文件名圖片大小最后修改時間全選

<?phpforeach ($picarr as $key=>$value){if($key>1){ //去掉前面的兩個空值;

echo "

";echo "".($key-1).""; //序號

echo "

".$value.""; //文件名

echo "

"; //圖片

echo "

".format_bytes(filesize("pic/$value")).""; //filesize 獲取文件大小(單位:B);

echo "

".date("Y-m-d H:i:s", filemtime("pic/$value")).""; //filemtime 獲取文件最后修改時間(單位:毫秒) date轉換時間

echo "

"; //多選框傳值(傳的是文件名)

echo "

";

}

}?>

function chooseall(str){ //全選方法

var cholen=document.getElementsByName('del[]').length;for(i=0;i<=cholen;i++){

document.getElementsByName('del[]')[i].checked=str;

}

}

document.getElementById("all").οnclick=function(){ //全選事件

if(this.checked==true){

chooseall(true);

}else{

chooseall(false);

}

}

四:刪除與下載后臺處理頁面

$picname=$_POST['del'];foreach($picname as $value){unlink("pic/$value"); //刪除對應的文件;

}

}else if($_REQUEST['download']){$picname=$_POST['del'];if($picname!=''){ //去掉空值的情況(沒有選中任何項,無表單傳值)

foreach($picname as $value){if(!file_exists("pic/$value")){ //沒有該文件時無法下載;

echo "";header("location:picscan.php");

}else{$fp=fopen("pic/$value","r"); //打開文件指針;

$file_size=filesize("pic/$value"); //文件的大小;

Header("Content-type: application/octet-stream"); //告知瀏覽器下載的文件類型;

Header("Accept-Ranges: bytes"); //返回的文件大小按照字節計算;

Header("Accept-Length:".$file_size); //返回的文件大小;

Header("Content-Disposition: attachment; filename=".$value); //返回的文件的名稱;

$buffer=1024;$file_count=0;while(!feof($fp) && $file_count

}fclose($fp);

}

}

}

}elseif ($_REQUEST['downloadall'] ) { //一個表單多個提交按鈕,區分提交按鈕的name值;

$picname=$_POST['del'];if($picname!=''){ //去掉空值的情況(沒有選中任何項,無表單傳值)

$filename = "pic/download.zip"; //最終生成的文件名(含路徑)

if(!file_exists($filename)){ //重新生成文件

$zip = new ZipArchive();//使用本類,linux需開啟zlib,windows需取消php_zip.dll前的注釋

if ($zip->open($filename, ZIPARCHIVE::CREATE)!==TRUE) {exit('無法打開文件,或者文件創建失敗');

}foreach( $picname as $val){if(file_exists("pic/$val")){$zip->addFile( "pic/$val", basename($val));//第二個參數是放在壓縮包中的文件名稱,如果文件可能會有重復,就需要注意一下

}

}$zip->close();//關閉

}if(!file_exists($filename)){exit("無法找到文件"); //即使創建,仍有可能失敗。。。。

}header("Cache-Control: public");header("Content-Description: File Transfer");header('Content-disposition: attachment; filename='.basename($filename)); //文件名

header("Content-Type: application/zip"); //zip格式的

header("Content-Transfer-Encoding: binary"); //告訴瀏覽器,這是二進制文件

header('Content-Length: '. filesize($filename)); //告訴瀏覽器,文件大小

@readfile($filename);unlink($filename);

}

}header("location:picscan.php");?>

還有好幾個功能沒有實現(文件的排序,中文文件名的轉碼等,涉及到批量上傳下載,中文轉碼老是報錯,如果有哪位大神有空,還請指點一二),慢慢摸索中......

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259924.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259924.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259924.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Perl 面對對象的案例理解

晚上仔細的推敲了下大駱駝的案例&#xff0c;由于有段時間沒繼續看下去了&#xff0c;導致有些地方忘記了。 今天仔細的翻了下面對對象那塊&#xff0c;說實話&#xff0c;認真看&#xff0c;用心看的話&#xff0c;就能看明白它寫神碼。 看完前面一堆的理論&#xff0c;發現一…

計算機發展與應用,網絡計算機的發展與應用

網絡計算機(Network Computer)&#xff0c;簡稱NC&#xff0c;是專用于高速網絡環境下的一種計算機終端設備。它一般不需要硬盤、軟驅及光驅等外部存儲器&#xff0c;而是通過網絡獲取大部分資源&#xff0c;其所需要的應用程序和數據都存儲在服務器上。NC與PC的比較隨著網絡技…

ASP.NET 緩存技術分析

緩存功能是大型網站設計一個很重要的部分。由數據庫驅動的Web應用程序&#xff0c;如果需要改善其性能&#xff0c;最好的方法是使用緩存功能。可能的情況下盡量使用緩 存&#xff0c;從內存中返回數據的速度始終比去數據庫查的速度快&#xff0c;因而可以大大提供應用程序的性…

分布式搜索 Elasticsearch —— 刪除索引

為什么80%的碼農都做不了架構師&#xff1f;>>> 刪除索引的方式很多&#xff0c;這里列舉三種。 指定 index 、type、id 執行刪除 package com.gsoft.gsearch.util;import org.elasticsearch.action.get.GetResponse; import org.junit.Test;import com.gsoft.gsea…

springmvc攔截器對請求參數解密_SpringMVC攔截器如何修改請求參數

攔截器1&#xff0c;基本攔截器&#xff1a;package cn.ijava.interceptor;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servle…

SQL Server 2008安裝配置說明書+簡單使用 親測可用

SQL Server 2008 序列號&#xff1a;Developer: PTTFM-X467G-P7RH2-3Q6CG-4DMYBEnterprise: JD8Y6-HQG69-P9H84-XDTPG-34MBB 產品秘藥JD8Y6-HQG69-P9H84-XDTPG-34MBB 下面只說企業版安裝說明 SQL Server版本&#xff1a;SQL Server 2008 企業版。 安裝Microsoft SQL Server 20…

計算機云客戶端,藍奏云網盤客戶端 0.3.7電腦版

藍奏云由于不限速、下載速度快被很多用戶所歡迎&#xff0c;不過藍奏云沒有客戶端&#xff0c;上傳下載有時也不太方便,這里有大神寫了藍奏云網盤客戶端&#xff0c;采用藍奏云API項目使用PyQt5實現圖形界面&#xff0c;藍奏云盤API項目實現了對藍奏網盤的基本操作: 登錄、列出…

IT知識免費學習視頻地址大全

Jquery2.0實戰 http://edu.ibeifeng.com/view-index-id-318.html使用SSH框架技術開發學籍管理系統-Hibernate 部分http://edu.ibeifeng.com/view-index-id-319.htmlSpring 實戰:使用 SSH 框架技術開發學籍管理系統http://edu.ibeifeng.com/view-index-id-320.htmlStruts 實戰:使…

三十分鐘學會SED

本文承接之前寫的三十分鐘學會AWK一文&#xff0c;在學習完AWK之后&#xff0c;趁熱打鐵又學習了一下SED&#xff0c;不得不說這兩個工具真的堪稱文本處理神器&#xff0c;誰用誰知道&#xff01;本文大部分內容依舊是翻譯自Tutorialspoint上的入門教程&#xff0c;這次是 Sed …

unity實現圖片輪播效果_Unity實現圖片輪播組件

游戲中有時候會見到圖片輪播的效果&#xff0c;那么這里就自己封裝了一個&#xff0c;包括自動輪播、切頁按鈕控制、頁碼下標更新、滑動輪播、切頁后的回調等等 。下面&#xff0c;先上一個簡陋的gif動態效果圖從圖中可以看出&#xff0c;該示例包括了三張圖片的輪播&#xff0…

[置頂] 2013騰訊編程馬拉松初賽第4場(3月24)(HDU 4520 HDU4521 HDU4522 HDU4523 HDU4524)...

話說昨天比賽終于拿到一個不錯的名次&#xff0c;rank77&#xff0c;對于我們這種ACM弱菜的學校來說已經很好了&#xff0c;可惜我1003用了倆floyd超時&#xff0c;如果我最近稍微搞搞圖論的話&#xff0c;用個bellman&#xff0c;或者SPFA&#xff0c;絕對超不了了就。。。哎。…

計算機學院年會,重慶大學計算機學院舉行2019年迎新晚會

2019年12月6號晚&#xff0c;重慶大學計算機學院2019年迎新晚會在蘭園小劇場舉行。出席本次晚會的嘉賓有計算機學院黨委副書記兼紀委書記郭坤銀、黨委組織員劉霜、2016級輔導員李若菡老師、2017級輔導員古曦老師、2018級輔導員鄭田青老師、2019級輔導員謝璧如老師。本次晚會的主…

[轉貼]Cocos2d-x3.2與OpenGL渲染總結(一)Cocos2d-x3.2的渲染流程

看了opengles有一段時間了&#xff0c;算是了解了一下下。然后&#xff0c;就在基本要決定還是回歸cocos2dx 3.2的&#xff0c;看了這篇好文章&#xff0c;欣喜轉之~ 推薦看原帖&#xff1a; Cocos2d-x3.2與OpenGL渲染總結(一)Cocos2d-x3.2的渲染流程 最近幾天&#xff0c;我都…

省賽熱身賽之Median

原題&#xff1a; Description A median is described as the numeric value separating the higher half of a list, from the lower half. The median of a finite list of numbers can be found by arranging all the elements from lowest value to highest value and pick…

win32 段寄存器怎么尋址

32位cpu 地址線擴展成了32位&#xff0c;這和數據線的寬度是一致的。因此&#xff0c;在32位機里其實并不需要采用“物理地址段&#xff1a;偏移”這種地址表達方式。原來在16位機里規定的 每一個段不大于64kb在32位機里也不是必要的。所以&#xff0c;對于32位機來講&#xff…

聯想拯救者y7000p加內存條_筆記本怎么升級內存和硬盤 聯想Y7000P加裝內存和硬盤圖文教程 (全文)...

一般目前新買的筆記本電腦,大都是標配8GB內存和單塊固態硬盤,內存和硬盤容量適中,但對于一些制圖設計、偏大型游戲,又或者對硬盤存儲要求比較高的用戶來說,顯然就不太夠用,這時候我們一般會通過升級內存和硬盤來解決。那么,筆記本怎么升級內存和硬盤?下面以聯想Y7000P筆…

計算機組裝與維護實訓1,計算機組裝與維護實訓報告[1]

計算機組裝與維護實訓報告[1] (12頁)本資源提供全文預覽&#xff0c;點擊全文預覽即可全文預覽,如果喜歡文檔就下載吧&#xff0c;查找使用更方便哦&#xff01;11.90 積分實習報告設計題目&#xff1a; 計算機組裝與維護實習 專業班級&#xff1a; 計算機應用103班 學生姓名&a…

node.js-------使用路由模塊

路由需要的信息&#xff0c;包括URL 及GET 或 POST參數。路由根據這些參數執行相應的js處理程序&#xff0c;因此&#xff0c;需要在HTTP請求中提取出URL以及GET或POST參數。這些請求參數在request對象中&#xff0c;這個對象是onRequest()回調函數的第一個參數。需要提取這些信…

Docker - 在CentOS 7中安裝Docker

在CentOS 7中安裝Docker 1-確認系統信息 # cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core) # uname -a Linux CentOS-7 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 2-安裝docker # yum -y install docker 3…

HDU 1715 大菲波數 (大數問題)

/* 復習大數問題&#xff1b; */ #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <string> #include <iomanip> using namespace std;int nu…