VFP保存大文件到MSSQL,最大2G,超过得上手段

affb98a46370cb5595be10534fd3b113.gif

目前社群在聊这个大文件读取的问题,赵总说要把image字段换成BASE64来读取,我就一脸蒙。

02e646e5b0ac53c24032abbf80fcbc75.png

为什么要转BASE64,体积暴涨三分之一,明显直取更快,200MB文件对单个文件来说,不算大。

3634ded777386aaff0d65942779d47a0.png

赵总还写了啥直读程序,

e893c6635276b367ea0810b9a55d4e07.png

于是就来验证一下情况

拿出猫框,简单的操作一下

建立MSSQL数据库表

948a70b697b12cbe1bfe7f5d8663e658.png

1生成猫框DAL类

Define Class Dal_myfile As Qiyu_CursorAdapter Of Locfile('Qiyu_CursorAdapter.fxp')
    *--创建:祺佑工作室 日期:2023.09.20 http://www.sn58.cn
  Alias = 'myfile'
  WhereType =  1 && 1 关键字段 2 关键字段And可更新字段  3关键字段及其它已修改的字段 4 关键字段And时间戳
  KeyFieldList = "ID"  
  Tables = "myfile"
  oDAL=.F.
  nRecno=0  
  uId=.f.
  uOldId=.f.
  DataSourceType="ODBC"
  BufferModeOverride= 5  && 3 开放式行缓冲 5开放式表缓冲
  isUpdateDelcmd=.t. &&执行DELETE方法后,是否立即更新后台数据库
  FetchSize=-1
  
  
  InsertCmdRefreshFieldList='ID'
  UpdateCmdRefreshFieldList='ID'
  InsertCmdRefreshCmd='SELECT ID FROM myfile WHERE ID=@@IDENTITY'  
    PROCEDURE setupCA
      Text to This.SelectCmd noshow
    select TOP 1 ID,MYIMG from myfile ORDER BY id desc
    EndText
    Text to This.CursorSchema noshow
     ID   I(4) , MYimg  w(4) 
    EndText
    Text to This.UpdatableFieldList noshow
    ID,MYIMG 
    EndText
    Text to This.UpdateNameList noshow
    ID myfile.ID,MYIMG myfile.MYIMG
    EndText


    ENDPROC
    
  Procedure Init
  LPARAMETERS nCon,uId
  DoDefault(nCon)
    
    this.setupCA()  &&初始各个字段
  Endproc 


  Procedure New
    This.nRecno=recno(this.alias)
    this.add()
  Endproc


  Procedure Edit
    Lparameters cName
    this.nRecno=recno(this.alias)
  ENDPROC


  *--由子类实现
  Procedure Go
  Note:接收一个uId的参数,并刷新表内容 注意未决更新会导致刷新失败
  Lparameters uId
  
  Endproc
  
     
   *--勾子方法,删除之前执行
   Procedure OnBeforeDelete()
   Endproc


   *--勾子方法,删除之后执行
   Procedure OnAfterDelete()
   Endproc
    
    *--勾子方法,保存之后执行
  Procedure OnAfterSave
  Endproc


    *--勾子方法,保存之前执行
  Procedure OnBeforeSave
  Endproc


   Procedure OnAfterUndo()
   NOTE *--勾子方法,撤消之后执行
    select (this.alias)
    locate for this.nRecno=recno()
   Endproc


  Procedure FieldValid
    NOTE:勾子方法,定位到修改记录行,自行判断
  Endproc


PROCEDURE parsejson
      LPARAMETERS cJson,cRoot,naction,cKeylist
      LOCAL oReader,cField,nFieldState 
      oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg") &&JSON序列类
    oReader.cursorstruct=this.CursorSchema
    oReader.Alias=this.alias  &&临时表名
    oReader.root=cRoot  &&JSON数组所在位置 目前只支持第一层    
    oReader.keylist=this.KeyFieldList &&主键字段所在位置  
    oReader.parsecursor(cJson,naction) &&生成一个spaces表  
 
       IF !this.CursorAttach(this.alias,.t.)
          AERROR(laerror)
          this.msg=laerror(2)
          RETURN .f.
       ELSE
          RETURN .t.   
       endif 
    Endproc 
Enddefine

2 上传代码

xx=Getfile()
If !File(xx)
  Return
Endif
nsec=Datetime()
yy=Filetostr(xx)


oDal_myfile =Newobject("Dal_myfile","Dal_myfile.prg")
oDal_myfile.Nodata=.T.
oDal_myfile.CursorFill(.T.)
oDal_myfile.new()


Replace myimg With yy


If !oDal_myfile.Save()
  ?oDal_myfile.msg
Endif


?"上传时间",Datetime()-nsec

3 从后端数据库的保存到本地的代码

oDal_myfile =NEWOBJECT("Dal_myfile","Dal_myfile.prg")
oDal_myfile.cursorfill(.t.)
copy memo myimg to 1.rar

ae5c41d7034a6fca677d3ab34c123394.png

e748ff5cb1fa1ce803ee383410da2de3.png

472mb文件上传成功,下载成功,可以成功解压RAR文件。验证完毕。

SO EASY的猫框。

VFP文档中写W字段最大2G。

那突破也是有其它的方法,比如流式读写,上64位VFP。

无人区需要大家一起努力。

猫猫的心里话

加菲猫的VFP|狐友会社群接收投稿啦

加菲猫的VFP,用VFP不局限VFP,用VFP混合一切。无论是VFP,还是JS,还是C,只要能混合起来,都可以发表。

商业模式,销售技巧、需求规划、产品设计的知识通通可以发表。

暂定千字50元红包,,优秀的文章红包更大,一经发表,红包到手。

如何帮助使用VFP的人?

用VFP的人,有专业的,有非专业了,很多人其实是小白,问出的问题是小白,如果问题不对,我们引导他们问正确的问题。无论如何请不要嘲笑他们说帮助都不看,这么简单的问题都不会,嘲笑别人不行,而无法提出建设性答案,是很low的。

我们无论工作需要,还是有自己的软件,都是是需要真正的知识,如何让更多人学习真正的VFP知识呢,只需要点赞,在看,能转发朋友圈就更好了。

加菲猫的vfp倡导用"VFP极简混合开发,少写代码、快速出活,用VFP,但不局限于VFP,各种语言混合开发"

我已经带领一百多名会员成功掌到VFP的黑科技,进入了移动互联网时代,接下来我们要进入物联网领域。

2023年狐友会社群会员继续招募中

社群会员获取的权益有:

祺佑三层开发框架商业版(猫框),终身免费升级,终身技术支持。

开放的录播课程有:

微信小程序,微信公众号开发,H5 APP开发,Extjs BS开发,VFP面向对象进阶,VFP中间层开发。

源码类资源有:

支付组件源码,短信源码,权限组件源码,一些完整系统的源码。这个可以单独出售的,需要的可以联系我。

会员也可以实现群内资源对接,可以接分包,合作等各项商业或技术业务

40719e31130b13b46dbb2d857834514a.gif

986be9bc7219beda2f32a03e3d858f88.jpeg

e9c9ae5d20586fd957de8b8cd512a45f.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加菲猫的VFP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值