Lily.Core.FileDataProvider文件管理使用范例。
2009-05-20 09:40
211 查看
此组件主要支持进行文件管理,当前版本(1.0.0.2)支持局域网和FTP模式,可以自主扩展访问方式;
主要功能:
创建目录,删除目录,上传文件,下载文件,删除文件,返回远程路径。主要是这五个功能。
文件或目录在物理磁盘上的名称,默认都是以ID为名称的,所以不存在目录或文件的更改。
此组件不能单独使用,必须结合lily.Core实体结合使用。设计的目的是让一个实体可以对应一个或多个文件。把文件当作实体的字段。
表结构设计注意:
目录必须按ID,ParentID的结果。
文件使用目录ID进行关联。
对象层次:
目录或文件对象都继承于:Lily.Core.FileDataProvider.EntityFileBase
目录或文件对象操作类都继承于:Lily.Core.FileDataProvider.FileEntityHandler
下面列出一个代码示例:
Private f_目录 As Lily.Core.FileDataProvider.DirectoryField
<Browsable(False)> _
Public Overridable ReadOnly Property _目录() As Lily.Core.FileDataProvider.DirectoryField
Get
If f_目录 Is Nothing Then
'这是默认实体字段对象的获取方式
' f_目录 = Lily.Core.Util.OQLHelper.GetEntityField(Me, "目录", "目录", False, False, DbType.String, 50)
'这是文件对象字段实体获取方式,这里是目录。
'其实DirectoryField也是继承于EntityField对象的。
Me.f_目录 = Me.FileConnection.GetDirectoryField(Me, "目录", "目录", False, False, DbType.String, 50)
End If
Return f_目录
End Get
End Property
如果是文件则是:
Private f_文件 As Core.FileDataProvider.FileField
<Browsable(False)> _
Public Overridable ReadOnly Property _文件() As Core.FileDataProvider.FileField
Get
If f_文件 Is Nothing Then
'f_文件名称 = Lily.Core.Util.OQLHelper.GetEntityField(Me, "文件名称", "文件名称", False, False, DbType.String, 100)
Me.f_文件 = Me.FileConnection.GetFileField(Me, "文件", "文件", False, False, DbType.String, 1000, False, False, Me)
End If
Return f_文件
End Get
End Property
可以看出没有太大的区别。其中FileField与DirectoryField都是继承于实体字段EntityField。FileConnection见下面介绍
文件和目录都需要重新基类一个方法和一个属性
返回一个连接对象,组件设计之初就考虑了可以支持不同访问方式如:局域网或FTP,或其它的。所以都应该重写基类的FileConnection属性,返回一个可用可配置的连接对象。 这里有一个ConfigurationInfo.GetConnection是通过配置文件反射获取文件连接对象。对于局域网路径或FTP用户名密码等都在配置文件中。
Public Overrides Property FileConnection() As FileDataProvider.IFileConnection
Get
If MyBase.FileConnection Is Nothing Then
Return ConfigurationInfo.GetConnection()
End If
Return MyBase.FileConnection
End Get
Set(ByVal Value As FileDataProvider.IFileConnection)
MyBase.FileConnection = Value
End Set
End Property
获取对象的父路径,Lily.Core.FileDataProvider.Util.GetParentPath调用了一个存储过程,把ID,ParentID转换路径字符串。返回父目录路径或文件的目录路径部份。注意红色部份是文件实体里的代码,蓝色是目录实体里的代码。要区分一下,主要是传入的ID不一样。
Public Overrides Function GetParentPath() As String
Static path As String = String.Empty
If Me.FileConnection Is Nothing Then
Throw New Lily.Core.FileDataProvider.FileDataException("连接对象为空,不能进行文件管理。")
End If
If path Is Nothing OrElse path.Length = 0 Then
Dim t As New tb_目录管理
下面是文件的
path = Lily.Core.FileDataProvider.Util.GetParentPath(Me.FileConnection, t._ID.AttributeName, t._ParentID.AttributeName, t, Me.目录ID)
下面是目录的
path = Lily.Core.FileDataProvider.Util.GetParentPath(Me.FileConnection, t._ID.AttributeName, t._ParentID.AttributeName, t, Me.ParentID)
End If
If Not path Is Nothing OrElse path.Length > 0 Then
Return path
Else
Return String.Empty
End If
End Function
文件实体对象就创建好了。由于类的继承是单一的,这样实体就不具备权限方面的属性。可以通过以下这段代码来解决这个问题。
获取权利管理对象
ReadOnly Property Permission() As Lily.ComponentFramework.IPermission
Get
Return Lily.ComponentFramework.ComponentManager.Permission
End Get
End Property
如增加一个删除文件判断的方法。
Public Overridable Function HasDeleteFile() As Boolean
Return Me.Permission.Has(Me, "删除文件")
End Function
对于控件,还需要重写基类的GetPurviewObjectList方法。
Public Overrides Function GetPurviewObjectList() As System.Collections.ArrayList
Static ary As ArrayList
If ary Is Nothing Then
ary = New ArrayList
Else
Return ary
End If
ary.Add(New Common.tb_文件管理)
Return ary
End Function
基础了,我们来看看。文件对象的添加,删除,下载,查看。
上传文件:
dim item as new tb_文件管理
dim o as new tb_文件管理_Operate
item._文件.LocalFile="c:\1.txt"
o.Accept(Me.item)
删除文件:
Dim o As New Common.tb_文件管理_Operate
o.Delete(item)
其实删除与删除实体是一样,文件对象就是一个实体,只是在删除实体记录时,删除相应的文件记录。这中间启用了事务,保证了记录与物理文件的对应关系。但是删除最好不要嵌套,这样就不能保证关系的一致性了。因为文件删除后,不能回滚。
下载文件:
item._文件.DownFile(s.FileName)
其实s.Filename下载存放的路径。
远程路径:
Dim file As String = Me.ActiveFile.FileConnection.GetFullPath(Me.ActiveFile._文件)
FileViewerNav.Viewer(file)
这里为什么调用FileConnection对象的GetFullPath方法获取全路径呢,为什么不使用me.ActiveFile._文件.RemoteFullFileName属性。因为了RemoteFullFileName返回的路径可能是一个相对的。局域网上一个绝对的,FTP是相对的。而FileConnection的getfullPath方法返回就是一个绝对的远程路径。对于局域网就是\\xxx.xxxx.xxxx.xxx\user 这样的路径方式;FTP类似于ftp://user:pwd@xxx.xxx.xxx.xxx:21/3/4/1.txt 这样的路径。
目录操作与文件操作类似。
主要功能:
创建目录,删除目录,上传文件,下载文件,删除文件,返回远程路径。主要是这五个功能。
文件或目录在物理磁盘上的名称,默认都是以ID为名称的,所以不存在目录或文件的更改。
此组件不能单独使用,必须结合lily.Core实体结合使用。设计的目的是让一个实体可以对应一个或多个文件。把文件当作实体的字段。
表结构设计注意:
目录必须按ID,ParentID的结果。
文件使用目录ID进行关联。
对象层次:
目录或文件对象都继承于:Lily.Core.FileDataProvider.EntityFileBase
目录或文件对象操作类都继承于:Lily.Core.FileDataProvider.FileEntityHandler
下面列出一个代码示例:
Private f_目录 As Lily.Core.FileDataProvider.DirectoryField
<Browsable(False)> _
Public Overridable ReadOnly Property _目录() As Lily.Core.FileDataProvider.DirectoryField
Get
If f_目录 Is Nothing Then
'这是默认实体字段对象的获取方式
' f_目录 = Lily.Core.Util.OQLHelper.GetEntityField(Me, "目录", "目录", False, False, DbType.String, 50)
'这是文件对象字段实体获取方式,这里是目录。
'其实DirectoryField也是继承于EntityField对象的。
Me.f_目录 = Me.FileConnection.GetDirectoryField(Me, "目录", "目录", False, False, DbType.String, 50)
End If
Return f_目录
End Get
End Property
如果是文件则是:
Private f_文件 As Core.FileDataProvider.FileField
<Browsable(False)> _
Public Overridable ReadOnly Property _文件() As Core.FileDataProvider.FileField
Get
If f_文件 Is Nothing Then
'f_文件名称 = Lily.Core.Util.OQLHelper.GetEntityField(Me, "文件名称", "文件名称", False, False, DbType.String, 100)
Me.f_文件 = Me.FileConnection.GetFileField(Me, "文件", "文件", False, False, DbType.String, 1000, False, False, Me)
End If
Return f_文件
End Get
End Property
可以看出没有太大的区别。其中FileField与DirectoryField都是继承于实体字段EntityField。FileConnection见下面介绍
文件和目录都需要重新基类一个方法和一个属性
返回一个连接对象,组件设计之初就考虑了可以支持不同访问方式如:局域网或FTP,或其它的。所以都应该重写基类的FileConnection属性,返回一个可用可配置的连接对象。 这里有一个ConfigurationInfo.GetConnection是通过配置文件反射获取文件连接对象。对于局域网路径或FTP用户名密码等都在配置文件中。
Public Overrides Property FileConnection() As FileDataProvider.IFileConnection
Get
If MyBase.FileConnection Is Nothing Then
Return ConfigurationInfo.GetConnection()
End If
Return MyBase.FileConnection
End Get
Set(ByVal Value As FileDataProvider.IFileConnection)
MyBase.FileConnection = Value
End Set
End Property
获取对象的父路径,Lily.Core.FileDataProvider.Util.GetParentPath调用了一个存储过程,把ID,ParentID转换路径字符串。返回父目录路径或文件的目录路径部份。注意红色部份是文件实体里的代码,蓝色是目录实体里的代码。要区分一下,主要是传入的ID不一样。
Public Overrides Function GetParentPath() As String
Static path As String = String.Empty
If Me.FileConnection Is Nothing Then
Throw New Lily.Core.FileDataProvider.FileDataException("连接对象为空,不能进行文件管理。")
End If
If path Is Nothing OrElse path.Length = 0 Then
Dim t As New tb_目录管理
下面是文件的
path = Lily.Core.FileDataProvider.Util.GetParentPath(Me.FileConnection, t._ID.AttributeName, t._ParentID.AttributeName, t, Me.目录ID)
下面是目录的
path = Lily.Core.FileDataProvider.Util.GetParentPath(Me.FileConnection, t._ID.AttributeName, t._ParentID.AttributeName, t, Me.ParentID)
End If
If Not path Is Nothing OrElse path.Length > 0 Then
Return path
Else
Return String.Empty
End If
End Function
文件实体对象就创建好了。由于类的继承是单一的,这样实体就不具备权限方面的属性。可以通过以下这段代码来解决这个问题。
获取权利管理对象
ReadOnly Property Permission() As Lily.ComponentFramework.IPermission
Get
Return Lily.ComponentFramework.ComponentManager.Permission
End Get
End Property
如增加一个删除文件判断的方法。
Public Overridable Function HasDeleteFile() As Boolean
Return Me.Permission.Has(Me, "删除文件")
End Function
对于控件,还需要重写基类的GetPurviewObjectList方法。
Public Overrides Function GetPurviewObjectList() As System.Collections.ArrayList
Static ary As ArrayList
If ary Is Nothing Then
ary = New ArrayList
Else
Return ary
End If
ary.Add(New Common.tb_文件管理)
Return ary
End Function
基础了,我们来看看。文件对象的添加,删除,下载,查看。
上传文件:
dim item as new tb_文件管理
dim o as new tb_文件管理_Operate
item._文件.LocalFile="c:\1.txt"
o.Accept(Me.item)
删除文件:
Dim o As New Common.tb_文件管理_Operate
o.Delete(item)
其实删除与删除实体是一样,文件对象就是一个实体,只是在删除实体记录时,删除相应的文件记录。这中间启用了事务,保证了记录与物理文件的对应关系。但是删除最好不要嵌套,这样就不能保证关系的一致性了。因为文件删除后,不能回滚。
下载文件:
item._文件.DownFile(s.FileName)
其实s.Filename下载存放的路径。
远程路径:
Dim file As String = Me.ActiveFile.FileConnection.GetFullPath(Me.ActiveFile._文件)
FileViewerNav.Viewer(file)
这里为什么调用FileConnection对象的GetFullPath方法获取全路径呢,为什么不使用me.ActiveFile._文件.RemoteFullFileName属性。因为了RemoteFullFileName返回的路径可能是一个相对的。局域网上一个绝对的,FTP是相对的。而FileConnection的getfullPath方法返回就是一个绝对的远程路径。对于局域网就是\\xxx.xxxx.xxxx.xxx\user 这样的路径方式;FTP类似于ftp://user:pwd@xxx.xxx.xxx.xxx:21/3/4/1.txt 这样的路径。
目录操作与文件操作类似。
相关文章推荐
- ASP.NET Core使用静态文件、目录游览与MIME类型管理
- ASP.NET Core使用静态文件、目录游览与MIME类型管理
- ASP.NET Core使用静态文件、目录游览与MIME类型管理
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- obj-c编程10:Foundation库中类的使用(4)[文件管理,查询当前进程信息]
- 20170928 使用网页管理集群 按行读取写入useragent txt文件
- System.Data.Entity.Core.EntityException: The underlying provider failed on Open. ---> System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
- 使用cron,logrotate来管理日志文件
- 如何正确使用SVN建立本地文件管理
- jdbc数据库连接管理封装工具类,不同使用属性文件配置数据库连接信息(1)
- jdbc数据库连接管理封装工具类,不同使用属性文件配置数据库连接信息(3)
- linux磁盘及文件系统管理2——使用fdisk进行磁盘管理
- 文件系统管理 之 Linux 查看磁盘分区、文件系统、使用情况的命令和相关工具介绍
- 使用 udev 高效、动态地管理 Linux 设备文件
- 8.31_Linux高级文件系统管理之磁盘配额、RAID和LVM的使用
- 如何使用gcore工具获取一个core文件而不重启应用?
- Kloxo面板-上传网站程序,管理网站文件,压缩和解压文件,使用FTP帐号
- Linux下使用core文件调试程序
- 完成一个学生管理程序,使用学号作为键添加5个学生对象,并可以将全部信息保存在文件中,可以实现对学生信息的学号查找,输出全部学生信息的功能。
- C++文本查询程序 不要定义类和智能指针管理数据 C++Primer练习12.28 使用vector,map,set容器保存来自文件的数据并生成查询结果