今天產品有了一個提了一個新的需求:後臺上傳PDF文件
因爲要的着急,所以老大直接給了我建議:使用PDFObject來實現前端的顯示,後臺上傳文件想必大家都很熟悉了,就是跟上傳圖片額功能是一樣的,完全不用修改
一、後臺上傳樣式
<div class="div div7" style="width: 700px;">上傳附件(PDF不得超過100M):<input type="file" name="files" class="join-num" id="attachement" size="20"/>
<input type="button" class="btn" id="buttonUpload" "ajaxFileUpload('attachement');" value="上傳附件"/><span style="color:red">*</span>
<input type="text" name="downloadpath" id="downloadpath" value=""/>
<input type="hidden" name="filetype" id="filetype" value=""/>
</div>
運營直接點擊上傳附件就觸發了上傳的js以及後臺請求,接下來就是後臺接受請求,進行收到的文件處理並保存
二、後臺PHP接收處理、保存文件
注:本人的PHP版本較低,處理代碼僅供參考,但邏輯絕對沒差
public function postIndex(){
ini_set('max_execution_time',3600);
$sTmpname = $_FILES['files']['tmp_name'];
$sFilename = $_FILES['files']['name'];
$sTime = time();
$sFilesize = round(@filesize($sTmpname)/1024,2);
$sError = '';
if(!empty($_FILES['files']['error'])){
switch($_FILES['files']['error'])
{
case '1':$sError = 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; break;
case '2':$sError = 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form';break;
case '3':$sError = 'The uploaded file was only partially uploaded';break;
case '4':$sError = 'No file was uploaded.';break;
case '6':$sError = 'Missing a temporary folder';break;
case '7':$sError = 'Failed to write file to disk';break;
case '8':$sError = 'File upload stopped by extension';break;
case '999':default:$sError = 'No error code avaiable';
}
}elseif(empty($sTmpname) || $sTmpname == 'none'){
$sError = 'No file was uploaded..';
}elseif($sFilesize > 102400){
$sError = '每份上傳文件不能超過100M';
}else{
$aTypes = array('jpg','bmp','png','gif','doc','docx','xls','xlsx','pdf','zip','swf','flv');//***********上傳類型
$sFiletype = false;
$sExt = explode(".",$sFilename);
$sExt = array_pop($sExt);
$sExt = strtolower($sExt);
if(in_array($sExt,$aTypes)){
$sFiletype = $sExt;
}
//遞歸創建目錄
if($sFiletype){
$sPath = 'uploadfile/'.date('Y',$sTime).'/'.date('md',$sTime);
$spptPath = '';//ppt保存路徑
if(in_array($sFiletype,array('ppt','pptx'))){
$spptPath = 'uploadfile/ppt';//ppt保證能找到路徑
}
$path = $sPath;
$sPath = $this->publicpath.'/'.$sPath;
mkdirs($sPath);
//如果是ppt的話,創建ppt路徑用於ppt轉圖片
if($spptPath){
$spptPath = $this->publicpath.'/'.$spptPath;
mkdirs($spptPath);
}
//保存上傳的圖片
$filename=date('YmdHis',$sTime).rand(1000,9999).'.'.$sFiletype;//生成文件名
$file_allurl=$sPath.'/'.$filename;//保存文件的路徑
if(!move_uploaded_file($sTmpname,$file_allurl)){
$sError = "failed to copy $file_backup...\n";
}
//拷貝ppt用以ppt2img
if($spptPath){
$ppt_url = $spptPath.'/'.$filename;
copy($file_allurl,$ppt_url);
}
//取得回傳的文件信息(文件名稱、類型)
$url = $path.'/'.$filename;
$sMsg = " File Name: " . $sFilename. ", ";
$sMsg .= " File Size: " . $sFilesize.", ";
$sType = $sFiletype;
}else{
$sError='文件類型錯誤!允許的文件類型: ';
foreach($aTypes as $k=>$v){
if($k==0) $sError.=$v;
else $sError.=','.$v;
}
}
@unlink($_FILES['files']);
}
if(empty($_FILES['files']['error'])&&$sFiletype){
$pptid = 0;
if(in_array($sType,array('ppt','pptx'))){
$aPpt = array('pptname'=>$sFilename,'newname'=>$filename);
$oPpt = new Ppt($aPpt);
$oPpt->save();
$pptid = $oPpt->getKey();
}
$aAttachement = array('filename'=>$filename,'filepath'=>$url,'filetype'=>$sType,'filesize'=>$sFilesize,'created_at'=>$sTime);
$oAttachement = new Attachement($aAttachement);
$oAttachement->save();
$fileid="";
$aReturn_array = array(
"error"=>$sError,
"id"=>$fileid,
"msg"=>$sMsg,
"ftype"=>$sType,
"filesize"=>$sFilesize,
"filename"=>$filename,
"sourcename"=>$sFilename,
"url"=>$url,
'pptid'=>$pptid
);
}else{
$aReturn_array = array("error"=>$sError);
}
return json_encode($aReturn_array);
這裏是對於你可以用到的所有類型的文件處理,包含*‘jpg’,‘bmp’,‘png’,‘gif’,‘doc’,‘docx’,‘xls’,‘xlsx’,‘pdf’,‘zip’,‘swf’,‘flv’*這些也算比較完全了,這裏可以好好研究一下喲
前兩部是保存pdf的步驟,接下來就是PDF顯示的分享了。
爲了更詳細的介紹,請移駕到下一篇,好好聽我分享
下一篇:使用pdfobject.js實現在線瀏覽PDF–前端顯示PDF