您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)PHP怎么實(shí)現(xiàn)將Word文件保存到SQL Server數(shù)據(jù)庫(kù),小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
完成界面:
前端的頁(yè)面文件:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>layui</title> <meta name="renderer" content="webkit"> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <link rel="stylesheet" href="lib/layui-v2.6.3/css/layui.css" rel="external nofollow" media="all"> <link rel="stylesheet" href="css/public.css" rel="external nofollow" media="all"> <style> body { background-color: #ffffff; } </style> </head> <body> <div class="layui-form layuimini-form"> <form action="" class="layui-form login-bottom" id="uploadFile"> <div class="layui-form-item"> <label class="layui-form-label required">模板文件名</label> <div class="layui-input-block"> <input type="text" name="Dc01" id="Dc01" lay-verify="required" lay-reqtext="模板文件名稱" value="" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label required">簡(jiǎn)要說(shuō)明</label> <div class="layui-input-block"> <input type="text" name="Dc04" id="Dc04" value="" class="layui-input"> </div> </div> <div class="layui-form-item" > <label class="layui-form-label required">Word模板</label> <div class="layui-input-inline" > <input type="text" name="Dc05" id="Dc05" value="" class="layui-input" disabled="disabled"> </div> <div class="layui-input-inline" > <!-- <input type="button" value="選擇Word文件" id="selectWord" /> --> <button type="button" class="layui-btn layui-btn-sm layui-btn-normal" id="selectWord">選擇Word文件</button> <input type='file' id='readFile' > </div> </div> <div class="layui-form-item"> <label class="layui-form-label">項(xiàng)目名稱</label> <div class="layui-input-block"> <input type="text" name="Dc06" id="Dc06" value="" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">子項(xiàng)目名稱</label> <div class="layui-input-block"> <input type="text" name="Dc07" id="Dc07" value="" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">項(xiàng)目屬性</label> <div class="layui-input-inline"> <select id="Dc08" name="Dc08" lay-filter="outUnitList"> <option value="日常維護(hù)">服務(wù)</option> <option value="定期巡檢">物質(zhì)采購(gòu)</option> <option value="數(shù)據(jù)處理">工程</option> </select> </div> <label class="layui-form-label">適用年度</label> <div class="layui-input-inline"> <input type="text" name="Dc09" id="Dc09" value="" class="layui-input"> </div> </div> <div class="layui-form-item"> <label class="layui-form-label">上傳人</label> <div class="layui-input-inline"> <input type="text" name="Dc02" id="Dc02" value="" class="layui-input"> </div> <label class="layui-form-label">上傳時(shí)間</label> <div class="layui-input-inline"> <input type="text" name="Dc03" id="Dc03" value="" class="layui-input"> </div> </div> <div class="layui-form-item"> <div class="layui-input-block"> <button class="layui-btn layui-btn-normal" lay-submit lay-filter="saveBtn">確認(rèn)保存</button> </div> </div> </form> </div> <script src="lib/layui-v2.6.3/layui.js" charset="utf-8"></script> <script> layui.use(['layer','form','rate'], function () { var form = layui.form, layer = layui.layer, $ = layui.$; let currentUser=''; let currentDatetime=''; //得到當(dāng)前的用戶名稱 $.ajax({ url:'ZTBgetCurrentUser.php', type:'POST', async:false, success:function (data) { // $("input[name=C02]").val(data); document.getElementById('Dc02').value=data; currentUser=data; } }); //得到當(dāng)前服務(wù)器的時(shí)間 $.ajax({ url:'ZTBgetServerDatetime.php', type:'POST', async:false, success:function (data) { // $("input[name=C02]").val(data); document.getElementById('Dc03').value=data; document.getElementById('Dc09').value=data.substring(0,4); currentDatetime=data; } }); document.getElementById('selectWord').addEventListener('click',function(){ $("#readFile").trigger("click"); }); document.getElementById('readFile').addEventListener('change',function(){ if(this.files.length===0){ console.log('沒(méi)有選擇文件!'); return; } let reader=new FileReader(); reader.onload=function (){ console.log(reader.result); } // reader.readAsText(this.files[0]); // console.log(this.files[0].size); // console.log(this.files[0].name); // document.getElementById('Dc05'). document.getElementById('Dc05').value=this.files[0].name; // console.log(this.files[0].type); }) // localStorage.clear(); //監(jiān)聽(tīng)提交 form.on('submit(saveBtn)', function (data) { data = data.field; //檢查數(shù)據(jù) var canContinue=true; var strFalse=""; var jsonData=[];//準(zhǔn)備一個(gè)空數(shù)組 var updateData=new Object();//準(zhǔn)備對(duì)象 updateData.strTable="HtTemplateFile"; updateData.strWhere="c01='"+document.getElementById("Dc01").value+"' and c08='"+document.getElementById("Dc08").value+"' and c09='"+document.getElementById("Dc09").value+"'"; // console.log(updateData); jsonData.push(updateData); var json_str=JSON.stringify(jsonData); $.ajax({//檢查數(shù)據(jù)庫(kù)ID是否存在 url:'ZTBIsExist.php', data:json_str, type:'POST', datetype:'json', async:false, success:function (data) { if(data=='YES'){ canContinue=false; strFalse="要插入的記錄重復(fù)!"; } } }); if(canContinue){ // let formID = document.getElementById("uploadFile"); // let formData = new FormData(formID);//FormData構(gòu)造器接收的是一個(gè)form的DOM對(duì)象 let wordFile = document.getElementById('readFile'); //用FormData對(duì)象對(duì)表單數(shù)據(jù)進(jìn)行封裝 const fd = new FormData();//FormData構(gòu)造器接收的是一個(gè)form的DOM對(duì)象 fd.append("wordFile",wordFile.files[0]);//Word文件數(shù)據(jù) fd.append("c01",$('#Dc01').val());//模板文件名 fd.append("c02",currentUser);//上傳人 fd.append("c03",currentDatetime);//上傳時(shí)間 fd.append("c04",$('#Dc04').val());//簡(jiǎn)要說(shuō)明 fd.append("c06",$('#Dc06').val());//項(xiàng)目名稱 fd.append("c07",$('#Dc07').val());//子項(xiàng)目名稱 fd.append("c08",$('#Dc08').val());//項(xiàng)目類型 fd.append("c09",$('#Dc09').val());//適用年度 $.ajax({ url: 'ZTBHTTemplateFileAdd.php', type: "POST", data: fd, dataType: "JSON", async: true, processData: false,//設(shè)置為false,JQuery則不對(duì)數(shù)據(jù)進(jìn)行序列化 contentType: false,//設(shè)置為false,JQuery則不設(shè)Content-Type請(qǐng)求頭 beforeSend: function(xhr){ console.log('開(kāi)始!'); }, complete: function(xhr,status){ console.log('完成!'); }, error: function(xhr,status,error){ console.log('請(qǐng)求出錯(cuò)!'); }, success: function(result){ console.log('表單提交成功!'); } }); return false;//阻止表單的默認(rèn)提交事件 } }); }); </script> </body> </html>
后臺(tái)PHP文件:
<?php // error_reporting(0); session_start(); $continue=true; $falseStr=""; //獲取post的數(shù)據(jù) $C01 = $_POST['c01']; $C02 = $_POST['c02']; $C03 = $_POST['c03']; $C04 = $_POST['c04']; $C06 = $_POST['c06']; $C07 = $_POST['c07']; $C08 = $_POST['c08']; $C09 = $_POST['c09']; if(!isset($_FILES)){ $returnArr['c05']='沒(méi)有選擇上傳的文件'; }else{ $returnArr['c05']='有文件'; } if($_FILES['wordFile']['error']>0){ $returnArr['c05']='文件有錯(cuò)誤'; } $uploadFile = $_FILES["wordFile"];//得到上傳的文件 $wordBlob=file_get_contents($uploadFile['tmp_name']); file_put_contents("123.docx",$wordBlob , FILE_APPEND);//將文件內(nèi)容寫(xiě)到磁盤(pán)上 //將內(nèi)容字符串轉(zhuǎn)為十六進(jìn)制字符串 $wordHexData = "0x".bin2hex($wordBlob); $returnArr['c01']=$C01; $returnArr['c02']=$C02; $returnArr['c03']=$C03; $returnArr['c04']=$C04; $returnArr['c06']=$C06; $returnArr['c07']=$C07; $returnArr['c08']=$C08; $returnArr['c09']=$C09; //準(zhǔn)備寫(xiě)入數(shù)據(jù)庫(kù) require 'ZTBLinkConfig.php'; //準(zhǔn)備插入數(shù)據(jù) $sql = "insert into HtTemplateFile(c01,c02,c03,c04,c06,c07,c08,c09,c05) values('$C01','$C02','$C03','$C04','$C06','$C07','$C08','$C09',$wordHexData)"; $result =$ZTBConn->query($sql); $returnArr['c05']=$result; //讀出來(lái)寫(xiě)到磁盤(pán)上,這樣可以判斷上傳文件是否真的寫(xiě)入了。 // $sql = "select * from HtTemplateFile where c01='模板文件名' and c08='項(xiàng)目屬性' and c09='2021'"; // $result =$ZTBConn->query($sql); // while($row=$result->fetch()){ // $hexData= $row['c05']; // } // $binData=hex2bin($hexData); // file_put_contents("333.docx",$hexData , FILE_APPEND);//將文件內(nèi)容寫(xiě)到磁盤(pán)上 echo json_encode($returnArr,JSON_UNESCAPED_UNICODE); ?>
注意點(diǎn):
1、美化上傳按鈕
普通的文件上傳按鈕不好看,與整個(gè)界面不協(xié)調(diào),放上一個(gè)DIV后再放一個(gè)LayUI的按鈕就可以了,然后使用事件代理,觸發(fā)實(shí)際文件的上傳,是change事件。
document.getElementById('selectWord').addEventListener('click',function(){ $("#readFile").trigger("click"); });
2、封裝上傳的數(shù)據(jù)
使用formData,可以封裝整個(gè)form。
let formID = document.getElementById("uploadFile"); let formData = new FormData(formID);//FormData構(gòu)造器接收的是一個(gè)form的DOM對(duì)象
也可以按照要求逐個(gè)添加。
let wordFile = document.getElementById('readFile'); //用FormData對(duì)象對(duì)表單數(shù)據(jù)進(jìn)行封裝 const fd = new FormData();//FormData構(gòu)造器接收的是一個(gè)form的DOM對(duì)象 fd.append("wordFile",wordFile.files[0]);//Word文件數(shù)據(jù) fd.append("c01",$('#Dc01').val());//模板文件名 fd.append("c02",currentUser);//上傳人 fd.append("c03",currentDatetime);//上傳時(shí)間 fd.append("c04",$('#Dc04').val());//簡(jiǎn)要說(shuō)明 fd.append("c06",$('#Dc06').val());//項(xiàng)目名稱 fd.append("c07",$('#Dc07').val());//子項(xiàng)目名稱 fd.append("c08",$('#Dc08').val());//項(xiàng)目類型 fd.append("c09",$('#Dc09').val());//適用年度
既然是對(duì)象,最好使用const定義。
完整的上傳,使用ajax。
$.ajax({ url: 'ZTBHTTemplateFileAdd.php', type: "POST", data: fd, dataType: "JSON", async: true, processData: false,//設(shè)置為false,JQuery則不對(duì)數(shù)據(jù)進(jìn)行序列化 contentType: false,//設(shè)置為false,JQuery則不設(shè)Content-Type請(qǐng)求頭 beforeSend: function(xhr){ console.log('開(kāi)始!'); }, complete: function(xhr,status){ console.log('完成!'); }, error: function(xhr,status,error){ console.log('請(qǐng)求出錯(cuò)!'); }, success: function(result){ console.log('表單提交成功!'); } }); return false;//阻止表單的默認(rèn)提交事件 }
注意,返回值一定要是JSON格式!?。?/p>
3、接收上傳的數(shù)據(jù),我為了檢查數(shù)據(jù),是生成在磁盤(pán)上,這樣就好判斷上傳的結(jié)果,保存到數(shù)據(jù)庫(kù)后也是先取出來(lái)再寫(xiě)到磁盤(pán)上來(lái)判斷。
保存的時(shí)候需要將數(shù)據(jù)轉(zhuǎn)成16進(jìn)制的,讀取出來(lái)就不用再轉(zhuǎn)了!
寫(xiě)入數(shù)據(jù)庫(kù)前寫(xiě)入磁盤(pán):
$uploadFile = $_FILES["wordFile"];//得到上傳的文件 $wordBlob=file_get_contents($uploadFile['tmp_name']); file_put_contents("123.docx",$wordBlob , FILE_APPEND);//將文件內(nèi)容寫(xiě)到磁盤(pán)上 //將內(nèi)容字符串轉(zhuǎn)為十六進(jìn)制字符串 $wordHexData = "0x".bin2hex($wordBlob);
從數(shù)據(jù)庫(kù)中讀出來(lái)再寫(xiě)入磁盤(pán):
//讀出來(lái)寫(xiě)到磁盤(pán)上,這樣可以判斷上傳文件是否真的寫(xiě)入了。 $sql = "select * from HtTemplateFile where c01='模板文件名' and c08='項(xiàng)目屬性' and c09='2021'"; $result =$ZTBConn->query($sql); while($row=$result->fetch()){ $hexData= $row['c05']; } file_put_contents("333.docx",$hexData , FILE_APPEND);//將文件內(nèi)容寫(xiě)到磁盤(pán)上
MS SQL Server 2014的文件字段為image。
關(guān)于“PHP怎么實(shí)現(xiàn)將Word文件保存到SQL Server數(shù)據(jù)庫(kù)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。