今天产品有了一个提了一个新的需求:后台上传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" onclick="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
干货:使用pdfobject.js实现在线浏览PDF–前端显示PDF
干货:使用pdfobject.js实现在线浏览PDF–前端显示PDF
正事说完了,在这里帮忙宣传一个日用百货的店铺:‘我虽然资历尚浅,但质量绝对保证,价格绝对良心’
店铺名称:98K杂货店,点击进店铺,欢迎选购哟,说明了解来源可以优惠!!!