开发环境

VFP9 SP2 7423

祺佑三层开发框架(猫框)

1. 实现后端的文件管理WebAPI

WebApi的默认管理路径为网站的根目录

Define Class ctl_folder As Session*--获取所有目录Procedure  getlistDo setenv*--默认为wwwroot目录Local cPath,cfoldercfolder=HttpQueryParams2("folder")cPath=getwwwrootpath()If !Empty(cfolder)cPath=Addbs(cPath)+cfolderEndifIf !Directory(cPath)Error "目录不存在"EndifcPath=Addbs(cPath)+"*.*"oJson=Createobject("foxjson",{})Adir(larray,cPath,"D")For lni =1 To Alen(larray,1)oRow=Createobject("foxjson")oRow.Append("文件名",larray(lni ,1))oRow.Append("文件大小",Ceiling(larray(lni ,2)/1024))oRow.Append("修改时间",Transform(larray(lni ,3))+"T"+larray(lni ,4))If At("D",larray(lni ,5))>0oRow.Append("类型","目录")ElseoRow.Append("类型",Justext(larray(lni ,1)))EndifoJson.Append(oRow)EndforoReturn=Createobject("foxjson")oReturn.Append("folder",cfolder)oReturn.Append("rows",oJson)Return oReturn.tostring()Endproc*--上传文件Procedure  upfileLocal oResultoResult=GetUpfile(This.iconnid)Local cPath,cFlodercfolder=HttpQueryParams2("folder")cPath=getwwwrootpath()If !Empty(cfolder)cPath=Addbs(cPath)+cfolderEndifIf !Directory(cPath)Error "目录不存在"Endif*--返回为对象cFilename=oResult.ofieldcoll.Item("fileData").filenamecMydata=oResult.ofieldcoll.Item("fileData").fielddataStrtofile(cMydata,Addbs(cPath)+cFilename)TEXT TO lcResult NOSHOW TEXTMERGE PRETEXT 1+2{"errno":0,"errmsg":"ok","errorMsg":"ok","success":true,"file1":"<<cFilename>>"}ENDTEXTReturn  lcResultEndproc*-- 删除目录或文件Procedure  delLocal cPath,cfolder,caction,ctypecfolder=HttpQueryParams2("folder")caction=HttpQueryParams2("action")ctype=HttpQueryParams2("type")cPath=getwwwrootpath()If !Empty(cfolder)cPath=Addbs(cPath)+cfolderEndifIf Empty(caction)Error "操作对象不存在"EndifcPath=Addbs(cPath)+cactionIf ctype=="目录"If !Directory(cPath)Error "目录不存在"EndifElseIf !File(cPath)Error "文件不存在"EndifEndifIf !DeleteFiles(cPath,.T.)Error "删除失败"EndifReturn [{"errno":0,"errmsg":"ok"}]Endproc*-- 创建目录Procedure MkdirLocal cPath,cfolder,caction,ctypecfolder=HttpQueryParams2("folder")caction=HttpQueryParams2("action")cPath=getwwwrootpath()If !Empty(cfolder)cPath=Addbs(cPath)+cfolderEndifIf Empty(caction)Error "操作对象不存在"EndifcPath=Addbs(cPath)+cactionMkdir cPathReturn [{"errno":0,"errmsg":"ok"}]Endproc
Enddefine

2. 前端管理软件开发

这里是用VFP来实现的,实际上用网页、微信小程序、APP都是OK的。

代码解析

获取所有文件夹与文件代码

表单getlist方法

Lparameters IsLoad,isnew,cfoldercUrl=serverurl+"ctl_folder.fsp?proc=getlist"
cSenddata="folder="+cfolderQiyu_HttpClient =Newobject("Qiyu_HttpClient","Qiyu_HttpClient.prg")
Qiyu_HttpClient.method="post"
cReturn= Qiyu_HttpClient.Send(cUrl,cSenddata)
If Isnull(cReturn)Messagebox(Qiyu_HttpClient.msg)Return .F.
Endif*--还要判断errno
If !IsLoadThisform.qiyu_GRID_SORT1.RecordSource=.Null.
EndifoReturn=foxjson_parse(cReturn)
If oReturn.getkey("errno")>0 AND oReturn.Item("errno")!=0Messagebox(oReturn.Item("errmsg"))RETURN .f.
Endifthisform.webpath=oReturn.item("folder")oReader=Newobject("QiyuJsonReader","QiyuJsonReader.prg") &&JSON序列类
TEXT TO oReader.cursorstruct NOSHOW TEXTMERGE
文件名 C(254),修改时间 T,文件大小 i,类型 c(10)
ENDTEXT
oReader.Alias="myorder"  &&临时表名
*oReader.keylist="id"
oReader.root="rows"  &&JSON数组所在位置 目前只支持第一层
If oReader.parsecursor(cReturn,0)<0 &&0 自动  1 新增  2 编辑 3 删除Messagebox(oReader.msg)Return .F.
EndifSELECT * FROM myorder  ORDER BY 类型 DESC INTO CURSOR myorder readwriteIf !IsLoadThisform.qiyu_GRID_SORT1.RecordSource="myorder"Thisform.qiyu_GRID_SORT1.bind()
EndifThisform.Refresh()

cmdupile的click事件文件上传代码:

cFile=Getfile()
If !File(cFile)Return
Endif
cUrl=serverurl+"ctl_folder.fsp?proc=upfile"
cUrl = cUrl + "&folder="+Thisform.webpathoQiyuUploadFile =Newobject("QiyuUploadFile","QiyuUploadFile.prg")
oQiyuUploadFile.Name="fileData"
cReturn=oQiyuUploadFile.uploadfile(cUrl,cFile)
nSize=oQiyuUploadFile.filesize/1024If Isnull(cReturn)Messagebox(oQiyuUploadFile.msg)Return
EndifoReturn=foxjson_parse(cReturn)
If oReturn.Item("errno")!=0Messagebox(oReturn.Item("errmsg"))Return
Endif
Delete From myorder Where 文件名=Justfname(cFile)
Insert Into myorder Values(Justfname(cFile),Datetime(),nSize,Justext(cFile))
Go Bottom
Thisform.Refresh()

cmddownload 的click事件下载文件代码

Select myorder
lcfile=myorder.文件名
If Alltrim(myorder.类型)!="目录"cUrl=serverurl+Strtran(Addbs(Thisform.webpath),"\","/")+Alltrim(lcfile)cFilename=Putfile("保存",Ttoc(Datetime(),1),Justext(lcfile))  If !Empty(cFilename)Qiyu_HttpClient =Newobject("Qiyu_HttpClient","Qiyu_HttpClient.prg")Qiyu_HttpClient.setHeader("content-type","application/json")    &&  content-type 默认为 application/jsonQiyu_HttpClient.method="GET"     &&GET  POST HTTP 请求方法Qiyu_HttpClient.DataType="BIN"    &&数据类型 string 字符串  bin 二进制流  cReturn= Qiyu_HttpClient.Send(cUrl)If Isnull(cReturn)Messagebox(Qiyu_HttpClient.msg)ElseStrtofile(cReturn,cFilename)EndifEndif
Endif

cmddel的click事件 删除文件或文件夹代码

yn=MESSAGEBOX("您确认要删除文件吗",4+32,thisform.Caption)
IF yn<>6RETURN
ENDIF cUrl=serverurl+"ctl_folder.fsp?proc=del"
cUrl = cUrl + "&folder="+Thisform.webpath
cUrl=cUrl+"&action="+Alltrim(文件名)+"&type="+Alltrim(类型)Qiyu_HttpClient =Newobject("Qiyu_HttpClient","Qiyu_HttpClient.prg")
Qiyu_HttpClient.setHeader("content-type","application/json")    &&  content-type 默认为 application/json
Qiyu_HttpClient.method="GET"  &&GET  POST HTTP 请求方法
Qiyu_HttpClient.DataType="STRING"    &&数据类型 string 字符串  bin 二进制流cReturn= Qiyu_HttpClient.Send(cUrl)
If Isnull(cReturn)Messagebox(Qiyu_HttpClient.msg)Return
EndifoReturn=foxjson_parse(cReturn)
If oReturn.Item("errno")!=0Messagebox(oReturn.Item("errmsg"))Return
EndifDelete In myorder
SKIP In myorder
Skip -1 In myorder
Thisform.qiyu_grid_sort1.Refresh()
Thisform.qiyu_grid_sort1.AfterRowColChange()

表格的column1.text1 的dblclick事件

Local lcdir
lcdir=""
If Alltrim(类型)=="目录"    Do CaseCase  Alltrim(文件名)=="."  &&刷新当前目录lcdir=Thisform.webpathCase Alltrim(文件名)==".."  &&进入上层目录Alines(ladir,Thisform.webpath,"\")lcpath=""For lni=1 To Alen(ladir)-1lcpath = lcpath + "\"+ladir(lni)EndforThisform.getlist(.F.,.T.,lcpath)lcdir=lcpathOtherwiselcdir=Addbs(Thisform.webpath)+Alltrim(文件名)EndcaseIf Thisform.getlist(.F.,.T.,lcdir)Thisform.collfloder.Add(lcdir)  Endif
Endif

用VFP实现一个网盘软件,上传,下载,删除一个不少相关推荐

  1. 百度网盘海外版上传下载不限速;一季度北京平均月薪达11187元;苹果 CEO 增加新候选人|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

  2. linux命令行连接百度网盘快速上传下载数据(bypy)

    摘要 现在的深度学习代码基本都是在服务器上运行,而大部分的服务器都是远程服务器,只支持命令行操作,所以有些在图形界面上比较容易下载的文件,在服务器上使用命令行很难下载.而且由于远程服务器和本地之间数据 ...

  3. java文件客户端下载_使用Java写一个minio的客户端上传下载文件

    标签:color   ati   tty   java   system   wired   format   media   param 前言: 确保已经安装了minio的服务端 代码: pom.x ...

  4. 阿里云oss 使用, 基于Nginx 配置云服务器+oss的内网访问 , 及使用Java SDK 完成上传,下载,删除,查询文件列表操作

    一.同阿里产品,云服务器和存储对象oss-配置内网访问 阿里存储对象oss 地址: https://oss.console.aliyun.com/overview 配置须知 通过Nginx 进行网络转 ...

  5. php清除账号登录,php实现账号登录/上传/下载/删除文件

    环境:Ubuntu16.04 搭建apache+mysql+php 1.安装apache sudo apt-get update sudo apt-get install apache2 安装完后输入 ...

  6. springboot---fastDFS 简单文件上传/下载/删除

    本来想简单的记录一下上传/下载,后来看着看着,发现这块的知识点太多.就记录下简单的操作,后面在补充 这里采用fastdfs分布式文件系统的形式来进行操作的(关于fastdfs的知识点有很多,这里就不赘 ...

  7. 基于Django的文件上传下载删除管理器

    这是一个基于Django的文件下载,上传,删除的任务管理器 先看看效果展示 1.运行完Django后,直接输入网址http://127.0.0.1:8000 就可以直接进去该网站 2.这是一个主图 上 ...

  8. 微信小程序文件云存储-上传下载删除功能

    文件云存储 云存储提供高可用.高稳定.强安全的云端存储服务,支持任意数量和形式的非结构化数据存储,如视频和图片,并在控制台进行可视化管理.云存储包含以下功能: 存储管理:支持文件夹,方便文件归类.支持 ...

  9. 阿里云oss简单的上传下载删除(java)

    阿里云oss上传和下载. 配置maven <!-- https://mvnrepository.com/artifact/com.aliyun.oss/aliyun-sdk-oss --> ...

  10. 多人上传文件公共网盘_上传网盘的信息也会泄露?个人隐私照片被多人传看,太过分了...

    原标题:上传网盘的信息也会泄露?个人隐私照片被多人传看,太过分了 关于百度网盘泄露隐私的事件已经不是第一次了,2017年就曾发生过一次非常严重的隐私泄露事件.在那次泄露的事件中,大量私人信息,包括身份 ...

最新文章

  1. 数据库创建索引的原则
  2. 本科发表6篇SCI论文,获多个荣誉,他刚入学就享受研究生待遇!
  3. 简单搭建zookeeper集群分布式/伪分布式
  4. 苹果7支持快充吗_支持苹果20W+华为22.5W快充,倍思发布迷你数显快充移动电源...
  5. 【转】Unity+单例模式的依赖注入
  6. 【Netty】零拷贝案例 ( transferTo | transferFrom )
  7. kmeans中的k的含义_聚类分析:kmeans 算法簇个数的确定
  8. 结语|日拱一卒无有尽,功不唐捐终入海
  9. grafana和zabbix的端口映射
  10. 动态时间规整—DTW算法
  11. 计算机计算公式代码,简单的计算器代码
  12. 基于RK3399Pro的BH1750驱动开发
  13. Photoshop - 教您怎样对扫描文件去除底色?
  14. 逆向工具Cutter
  15. 01-尚融宝项目介绍
  16. 【POJ 1788 --- Building a New Depot】
  17. 【LiteApp系列】爱奇艺小程序架构浅析
  18. 强大的Excel 的 VBA
  19. python道德经摘要
  20. 如何向gitee开源项目提交代码

热门文章

  1. MATLAB2020安装教程
  2. java项目启动失败的解决方案
  3. mysql数据库攻击与防御pdf_SQL注入攻击与防御 中文PDF清晰扫描版(38.6M)
  4. axure导入的元件库不见了_Axure教程丨制作自己的Axure元件库
  5. Axure导入元件库和使用
  6. mysql 递归查询_Mysql递归查询,无限级上下级菜单
  7. C语言的32个基本关键字
  8. 深入理解Nginx~Nginx配置的通用语法
  9. Excel 如何解决下标越界问题
  10. [转]vmlinuz