golang 文件的复制与下载

ioutil.ReadAll 也能实现文件写入,小文件还可以,大文件就内存不足了
这次我们使用 io.copy方法,它就是在文件指针之间直接复制的,不用全读入内存。

1.1 复制文件的功能实现

先说方法的实现,其实还是很简单的

/**
 * 复制文件
 * 同样适用于文件下载 如  CopyFile(http.ResponseWriter,/root/test.txt)
 */
func CopyFile(writer io.Writer, filePath string) error {

	srcFile, err := os.Open(filePath)
	if err != nil || os.IsNotExist(err) {
		logUtil.Errorf("读取文件失败:%s", err.Error())
		return err
	}

	_, err = io.Copy(writer, srcFile)
	if err != nil {
		logUtil.Errorf("写入文件失败:%s", err.Error())
		return err
	}
	return nil

}

1.2 http页面导出文件

像导出execl文件,不必使用“xlsx.OpenFile”和ioutil.ReadAll 读取文件内容,通过文件指针就可以导出文件了

func exportFile(context *tgo.Context) { 
	context.SetWriteFile("导入模板.xlsx", "application/vnd.ms-excel") 
	err := CopyFile(context.ResponseWriter, "/data/workshop/project/file.xlsx")
	if err != nil {
		context.Result = util.ErrorCommonRespWithMsg(-1, "下载模板失败")
	}
	return

}

1.3 文件的复制

golang 复制文件

func CopyLocalFile(newFile ,srcFile string) error {
    file, err := os.Open(newFile) 
	if err != nil { 
		logUtil.Errorf("创建文件失败:%s", err.Error())
		return err
	} 
	defer file.Close()  
 
	err := CopyFile(file, srcFile)
	if err != nil { 
		logUtil.Errorf("复制文件失败:%s", err.Error())
		return err
	}
	return nil

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值