开发环境 后端:VFP SP2 7423 祺佑三层开发框架(猫框) 前端:VUE2.0 Element
思路
- 实现BS上传
- 就是利用猫框的importexcel类将EXCEL文件转换为临时表,
- 将临时表插入到DAL_CA中实现一键保存。
1. 首先来看一下MSSQL数据结构
2. 代码生成器生成DAL_CA类
3. 将生成的DAL_CA类保存到开发框架的DAL目录中
4. 编写业务逻辑controller类
代码语言:javascript复制Define Class ctl_skin_ht as session
*--上传导入文件
Procedure upfile
oResult=GetUpFile() &&返回为集合对象
*--原文件名
cOldFilename=oResult.ofieldcoll.Item("file").filename &&文件名 跟上传name(微信)对应 key (mui) 对应
cExtName=Justext(cOldFilename) &&扩展名
IF !INLIST(UPPER(cExtName),"XLS","XLSX")
ERROR "必须上传EXCEL文件"
ENDIF
cFilename=Ttoc(Datetime(),1) Right(Transform(Second()*1000),6)
cFilename=cFilename "." cExtname
cMydata=oResult.ofieldcoll.Item("file").fielddata &&文件内容
cFilePath=getwwwrootpath("upfile")
If !Directory(cFilePath)
Md &cFilePath &&目前只在调试服务器下执行成功,发布时要预先创建
Endif
If Strtofile(cMydata,cFilePath cFilename)<=0
Error "写入文件失败,目录是否存在且可读写"
Endif
*--导入EXCEL生成临时表
xx=Newobject("importexcel","importexcel.prg")
xx.cursorstruc="手机型号 c(240),编号 c(50)"
xx.Alias="tmpxxx"
If !xx.Import(Sys(5) Sys(2003) "" cFilePath cFilename)
Error xx.msg
Endif
*-- 临时表写入DAL类,实现一键保存
oDAL=Newobject("Dal_skin","Dal_skin.prg")
oDAL.Nodata=.T.
If !oDAL.CursorFill(.T.)
Aerror(laerror)
Error laerror(2)
Endif
cTmpAlias=oDAL.Alias
Insert Into &cTmpAlias(model,skincode,mainmodel,types,Type,Memo,price) Select * From tmpxxx
If !oDAL.Save()
Error oDal.msg
Endif
Return cursortojson(oDAL.alias)
Endproc
ENDDEFINE
5. 前端页面,也可以自己写上传的页面
放下一个上传组件
代码语言:javascript复制<el-upload
:on-success="handle_success"
class="upload-demo"
:action="upurl"
multiple
:limit="1"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel文件</div>
</el-upload>
JS代码
代码语言:javascript复制export default {
components: {},
data() {
return {
upurl:"ctl_skin_ht.fsp?proc=upfile"
},
methods: {
handle_success(res){
console.log(res);
if(res.errno!=){
this.$message.warning(res.errmsg);
return;
}
this.$message.warning("上传成功");
},
}
}
运行调试服务器,测试上传,完美成功。但是发布到IIS却出现了:
2. 代码生成器生成DAL_CA类
3. 将生成的DAL_CA类保存到开发框架的DAL目录中
类名同文件名
4. 编写业务逻辑controller类
代码语言:javascript复制Define Class ctl_skin_ht as session
*--上传导入文件
Procedure upfile
oResult=GetUpFile() &&返回为集合对象
*--原文件名
cOldFilename=oResult.ofieldcoll.Item("file").filename &&文件名 跟上传name(微信)对应 key (mui) 对应
cExtName=Justext(cOldFilename) &&扩展名
IF !INLIST(UPPER(cExtName),"XLS","XLSX")
ERROR "必须上传EXCEL文件"
ENDIF
cFilename=Ttoc(Datetime(),1) Right(Transform(Second()*1000),6)
cFilename=cFilename "." cExtname
cMydata=oResult.ofieldcoll.Item("file").fielddata &&文件内容
cFilePath=getwwwrootpath("upfile")
If !Directory(cFilePath)
Md &cFilePath &&目前只在调试服务器下执行成功,发布时要预先创建
Endif
If Strtofile(cMydata,cFilePath cFilename)<=0
Error "写入文件失败,目录是否存在且可读写"
Endif
*--导入EXCEL生成临时表
xx=Newobject("importexcel","importexcel.prg")
xx.cursorstruc="手机型号 c(240),编号 c(50)"
xx.Alias="tmpxxx"
If !xx.Import(Sys(5) Sys(2003) "" cFilePath cFilename)
Error xx.msg
Endif
*-- 临时表写入DAL类,实现一键保存
oDAL=Newobject("Dal_skin","Dal_skin.prg")
oDAL.Nodata=.T.
If !oDAL.CursorFill(.T.)
Aerror(laerror)
Error laerror(2)
Endif
cTmpAlias=oDAL.Alias
Insert Into &cTmpAlias(model,skincode,mainmodel,types,Type,Memo,price) Select * From tmpxxx
If !oDAL.Save()
Error oDal.msg
Endif
Return cursortojson(oDAL.alias)
Endproc
ENDDEFINE
5. 前端页面,也可以自己写上传的页面
放下一个上传组件
代码语言:javascript复制<el-upload
:on-success="handle_success"
class="upload-demo"
:action="upurl"
multiple
:limit="1"
>
<el-button size="small" type="primary">点击上传</el-button>
<div slot="tip" class="el-upload__tip">只能上传excel文件</div>
</el-upload>
JS代码
代码语言:javascript复制export default {
components: {},
data() {
return {
upurl:"ctl_skin_ht.fsp?proc=upfile"
},
methods: {
handle_success(res){
console.log(res);
if(res.errno!=){
this.$message.warning(res.errmsg);
return;
}
this.$message.warning("上传成功");
},
}
}
运行调试服务器,测试上传,完美成功。但是发布到IIS却出现了:
下篇继续填坑