codecamp

GoFrame 资源管理-方法打包

本章节的示例演示打包/解包的同时也演示了对数据的加密/解密。大部分业务项目其实并不需要加密/解密操作,因此直接使用工具打包即可。

在上一章节我们介绍通过​gf​工具链进行文件/目录打包,并生成Go文件编译到可执行文件中。在本章节中,我们介绍资源管理中涉及到的方法,并通过一个打包/解包二进制资源文件的示例,介绍这些方法实现自定义的打包/解包功能。同时,我们也演示了如何通过自定义加解密来保护我们的资源文件内容。

接口文档:

https://pkg.go.dev/github.com/gogf/gf/v2/os/gres

简要介绍:

  1. 通过​Pack*​/​Unpack*​方法可以实现对任意文件的打包/解包功能,可以打包到二进制文件或者Go代码文件。
  2. 资源管理由​Resource​对象实现,可实现对打包内容的添加,文件的检索查找,以及对目录的遍历等功能。
  3. 资源文件由​File​对象实现,该文件对象和​os.File​文件对象类似,并且该对象实现了​http.File​接口。
  4. ScanDir​用于针对于特定目录下的文件/目录检索,并且支持递归检索。
  5. ScanDirFile​用于针对于特定目录下的文件检索,并且支持递归检索。
  6. 通过​Dump​方法在终端打印出​Resource​资源对象所有的文件列表,资源管理器中的文件分隔符号统一为​/​。
  7. 此外,​gres​资源管理模块提供了默认的​Resource​对象,并通过包方法提供了对该默认对象的操作。

自定义打包示例

我们将项目根目录下的​public​和​config​目录打包为​data.bin​二进制文件,并通过​gaes​加密算法对生成的二进制内容进行加密。

package main

import (
	"github.com/gogf/gf/v2/crypto/gaes"
	"github.com/gogf/gf/v2/os/gfile"
	"github.com/gogf/gf/v2/os/gres"
)

var (
	CryptoKey = []byte("x76cgqt36i9c863bzmotuf8626dxiwu0")
)

func main() {
	binContent, err := gres.Pack("public,config")
	if err != nil {
		panic(err)
	}
	binContent, err = gaes.Encrypt(binContent, CryptoKey)
	if err != nil {
		panic(err)
	}
	if err := gfile.PutBytes("data.bin", binContent); err != nil {
		panic(err)
	}
}

自定义解包示例

我们使用将刚才打包生成的​data.bin​,需要解密和解包两步操作。

package main

import (
	"github.com/gogf/gf/v2/crypto/gaes"
	"github.com/gogf/gf/v2/os/gfile"
	"github.com/gogf/gf/v2/os/gres"
)

var (
	CryptoKey = []byte("x76cgqt36i9c863bzmotuf8626dxiwu0")
)

func main() {
	binContent := gfile.GetBytes("data.bin")
	binContent, err := gaes.Decrypt(binContent, CryptoKey)
	if err != nil {
		panic(err)
	}
	if err := gres.Add(binContent); err != nil {
		panic(err)
	}
	gres.Dump()
}

最后,我们使用​gres.Dump()​打印出添加成功的文件列表查看资源文件是否添加成功。


GoFrame 资源管理-工具打包
GoFrame 资源管理-方法介绍
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GoFrame 核心组件

GoFrame 核心组件-数据库ORM

GoFrame 模块列表

GoFrame 模块列表-单元测试

GoFrame 模块列表-功能调试

GoFrame WEB服务开发

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }