我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

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

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

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

完成界面:

前端的页面文件:

<!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 class="lazy" data-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.getElementById('readFile').addEventListener('change',function(){
			if(this.files.length===0){
				console.log('没有选择文件!');
				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();
        //监听提交
        form.on('submit(saveBtn)', function (data) {
			data = data.field;			
			
			//检查数据
			var canContinue=true;
			var strFalse="";
			
			var jsonData=[];//准备一个空数组			 
			var updateData=new Object();//准备对象
			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({//检查数据库ID是否存在
				url:'ZTBIsExist.php',
				data:json_str,
				type:'POST',
				datetype:'json',
				async:false,
				success:function (data) {
					if(data=='YES'){ 
						canContinue=false;
						strFalse="要插入的记录重复!";
					}
				}
			});
 
			if(canContinue){
					// let formID = document.getElementById("uploadFile");
					// let formData = new FormData(formID);//FormData构造器接收的是一个form的DOM对象
					let wordFile = document.getElementById('readFile');
					//用FormData对象对表单数据进行封装
					const fd = new FormData();//FormData构造器接收的是一个form的DOM对象					
					fd.append("wordFile",wordFile.files[0]);//Word文件数据
					fd.append("c01",$('#Dc01').val());//模板文件名
					fd.append("c02",currentUser);//上传人
					fd.append("c03",currentDatetime);//上传时间
					fd.append("c04",$('#Dc04').val());//简要说明
					fd.append("c06",$('#Dc06').val());//项目名称
					fd.append("c07",$('#Dc07').val());//子项目名称
					fd.append("c08",$('#Dc08').val());//项目类型
					fd.append("c09",$('#Dc09').val());//适用年度
															
					$.ajax({						
						url: 'ZTBHTTemplateFileAdd.php',
						type: "POST",
						data: fd,
						dataType: "JSON",
						async: true,
						processData: false,//设置为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;//阻止表单的默认提交事件				
					}
           });
 
    });
</script>
</body>
</html>

后台PHP文件:

<?php
// error_reporting(0);
session_start();
$continue=true;
$falseStr="";
 
//获取post的数据
$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']='没有选择上传的文件';
}else{
	$returnArr['c05']='有文件';
}
 
if($_FILES['wordFile']['error']>0){
    $returnArr['c05']='文件有错误';
}
 
$uploadFile = $_FILES["wordFile"];//得到上传的文件
$wordBlob=file_get_contents($uploadFile['tmp_name']);
file_put_contents("123.docx",$wordBlob , FILE_APPEND);//将文件内容写到磁盘上
//将内容字符串转为十六进制字符串
$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;
 
//准备写入数据库
require 'ZTBLinkConfig.php';
//准备插入数据
$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;
 
//读出来写到磁盘上,这样可以判断上传文件是否真的写入了。
// $sql = "select * from  HtTemplateFile where c01='模板文件名' and c08='项目属性' 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);//将文件内容写到磁盘上
 
echo json_encode($returnArr,JSON_UNESCAPED_UNICODE);
?>

注意点:

1、美化上传按钮

普通的文件上传按钮不好看,与整个界面不协调,放上一个DIV后再放一个LayUI的按钮就可以了,然后使用事件代理,触发实际文件的上传,是change事件。

        document.getElementById('selectWord').addEventListener('click',function(){
            $("#readFile").trigger("click");            
        });

2、封装上传的数据

使用formData,可以封装整个form。

let formID = document.getElementById("uploadFile");
let formData = new FormData(formID);//FormData构造器接收的是一个form的DOM对象

也可以按照要求逐个添加。

let wordFile = document.getElementById('readFile');
//用FormData对象对表单数据进行封装
const fd = new FormData();//FormData构造器接收的是一个form的DOM对象                    
fd.append("wordFile",wordFile.files[0]);//Word文件数据
fd.append("c01",$('#Dc01').val());//模板文件名
fd.append("c02",currentUser);//上传人
fd.append("c03",currentDatetime);//上传时间
fd.append("c04",$('#Dc04').val());//简要说明
fd.append("c06",$('#Dc06').val());//项目名称
fd.append("c07",$('#Dc07').val());//子项目名称
fd.append("c08",$('#Dc08').val());//项目类型
fd.append("c09",$('#Dc09').val());//适用年度

既然是对象,最好使用const定义。

完整的上传,使用ajax。

					$.ajax({						
						url: 'ZTBHTTemplateFileAdd.php',
						type: "POST",
						data: fd,
						dataType: "JSON",
						async: true,
						processData: false,//设置为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。

到此这篇关于PHP实现将Word文件保存到SQL Server数据库的文章就介绍到这了,更多相关PHP Word保存数据库内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这篇文章将为大家详细讲解有关PHP怎么实现将Word文件保存到SQL Server数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。完成界面:前端的页面文件:<
2023-06-29

基于Android如何实现将数据库保存到SD卡

有时候为了需要,会将数据库保存到外部存储或者SD卡中(对于这种情况可以通过加密数据来避免数据被破解),比如一个应用支持多个数据,每个数据都需要有一个对应的数据库,并且数据库中的信息量特别大时,这显然更应该将数据库保存在外部存储或者SD卡中,
2022-06-06

php怎么正确将时间戳保存到数据库

这篇“php怎么正确将时间戳保存到数据库”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php怎么正确将时间戳保存到数据库”文
2023-07-05

阿里云数据库保存到本地文件夹里

这篇文章将介绍如何将阿里云数据库中的数据保存到本地文件夹,以便进行后续的处理和分析。正文:阿里云数据库是阿里云提供的一种云数据库服务,它可以提供高可用性、高扩展性和高性能的数据存储服务。如果我们需要将阿里云数据库中的数据保存到本地文件夹,可以采用以下步骤进行操作。步骤一:登录阿里云数据库管理平台首先,我们需要登录
阿里云数据库保存到本地文件夹里
2023-11-15

Scrapy将数据保存到Excel和MySQL中的方法实现

目录1. Excel1.1 openpyxl1.1.1 代码说明1.1.2 注意1.2 pandas1.2.1 代码说明1.2.2 常见错误1.3 openpyxl和pandas对比2. mysql2.1 代码说明2.2 pymysql介绍
2023-02-28

mysql实现将data文件直接导入数据库文件

这篇文章主要介绍了mysql实现将data文件直接导入数据库文件问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-08

webuploader如何结合php实现图片上传到本地和保存数据库

这篇文章将为大家详细讲解有关webuploader如何结合php实现图片上传到本地和保存数据库,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。webuploader结合php实现图片上传到本地和保存数据库,
2023-06-04

nodejs如何传文件放入同时将其存储到数据库

本文小编为大家详细介绍“nodejs如何传文件放入同时将其存储到数据库”,内容详细,步骤清晰,细节处理妥当,希望这篇“nodejs如何传文件放入同时将其存储到数据库”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。传
2023-07-05

mysql怎么实现将data文件直接导入数据库文件

这篇“mysql怎么实现将data文件直接导入数据库文件”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“mysql怎么实现将d
2023-03-09

Java怎么实现把数据存储到文件中

在Java中,可以使用FileOutputStream和BufferedWriter类将数据存储到文件中。以下是一个简单的示例代码:import java.io.BufferedWriter;import java.io.FileWri
Java怎么实现把数据存储到文件中
2024-04-09

Java怎么实现把数据存储到文件中

Java数据文件存储本文介绍使用FileWriter、BufferedWriter和PrintWriter类向文件写入数据,以及使用FileReader、BufferedReader和Scanner类从文件中读取数据的方法。这些方法允许Java应用程序永久存储和检索信息,为文件I/O操作提供了灵活性和性能。
Java怎么实现把数据存储到文件中
2024-04-10

我们如何使用 JDBC 将文件插入/存储到 MySQL 数据库中?

一般来说,文件的内容在 MySQL 数据库中存储在 Clob(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT)数据类型下。JDBC 提供了对 Clob 数据类型的支持,将文件的内容存储到数据库的表中。PreparedSt
2023-10-22

php配置数据库文件加密怎么实现

实现 PHP 配置数据库文件加密可以通过以下步骤进行:创建一个用于加密和解密的密钥。可以使用 OpenSSL 扩展的 openssl_random_pseudo_bytes 函数来生成一个随机密钥。$key = openssl_random
2023-10-27

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录