PHP实现将Word文件保存到SQL Server数据库

2022-04-17 05:42:27

算起来,折腾了整整一天,就是完成将上传的Word文件保存到MS SQL Server 2014数据库中。

第一次使用php来开发一个小程序,压力也挺大,主要是用户觉得我很快就能完成,这就有点尴尬了,怎么可能?!对于PHP,我还是个新手。

没有办法,只能硬着头皮干了,星期一开始。

原先我一直以为CSDN是最好的开发文档集散地,查资料是首选,结果我查了无数的资料,都没有找到相关的内容,快崩溃了。我发现很多记录日志真是糟糕,写开发日志是为了方便自己也方便别人,胡乱写有什么意义呢?!

只能不停地试,总算是完成了这个小功能。

完成界面:

PHP实现将Word文件保存到SQL Server数据库

前端的页面文件:

<!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">简要说明</label><div class="layui-input-block"><input type="text" name="Dc04" id="Dc04" value="" class="layui-input"></div></div><div class="layui-form-item" style="border: 0px solid #d70008;"><label class="layui-form-label required">Word模板</label><div class="layui-input-inline" style="width: 600px;"><input type="text" name="Dc05" id="Dc05"  value="" style="width: 400px;" class="layui-input" disabled="disabled"></div><div class="layui-input-inline" style="left: -200px;width: 120px;height: 32px;"><!-- <input type="button" value="选择Word文件" id="selectWord" style="width: 120px;height: 32px;"/> --><button type="button" class="layui-btn layui-btn-sm layui-btn-normal" style="width: 100px;height: 39px;" id="selectWord">选择Word文件</button><input type='file' id='readFile' style="opacity: 0;border: 0px solid #1e9fff;"></div></div> <div class="layui-form-item"><label class="layui-form-label">项目名称</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">子项目名称</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">项目属性</label><div class="layui-input-inline"><select id="Dc08" name="Dc08" lay-filter="outUnitList"><option value="日常维护">服务</option><option value="定期巡检">物质采购</option><option value="数据处理">工程</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">上传时间</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">确认保存</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='';//得到当前的用户名称$.ajax({url:'ZTBgetCurrentUser.php',type:'POST',async:false,success:function (data) {// $("input[name=C02]").val(data);document.getElementById('Dc02').value=data;currentUser=data;}});//得到当前服务器的时间$.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.getElementBe,//设置为false,JQuery则不对数据进行序列化contentType: false,//设置为false,JQuery则不设Content-Type请求头beforeSend: function(xhr){console.log('开始!');},complete: function(xhr,status){console.log('完成!');},error: function(xhr,status,error){console.log('请求出错!');},success: function(result){console.log('表单提交成功!');}}); return false;//阻止表单的默认提交事件}

注意,返回值一定要是JSON格式!!!

3、接收上传的数据,我为了检查数据,是生成在磁盘上,这样就好判断上传的结果,保存到数据库后也是先取出来再写到磁盘上来判断。

保存的时候需要将数据转成16进制的,读取出来就不用再转了!

写入数据库前写入磁盘:

$uploadFile = $_FILES["wordFile"];//得到上传的文件$wordBlob=file_get_contents($uploadFile['tmp_name']);file_put_contents("123.docx",$wordBlob , FILE_APPEND);//将文件内容写到磁盘上//将内容字符串转为十六进制字符串$wordHexData = "0x".bin2hex($wordBlob);

从数据库中读出来再写入磁盘:

//读出来写到磁盘上,这样可以判断上传文件是否真的写入了。$sql = "select * from  HtTemplateFile where c01='模板文件名' and c08='项目属性' and c09='2021'";$result =$ZTBConn->query($sql);while($row=$result->fetch()){         $hexData= $row['c05'];} file_put_contents("333.docx",$hexData , FILE_APPEND);//将文件内容写到磁盘上

MS SQL Server 2014的文件字段为image。

相关文章 大家在看