Beego 学习笔记12:文件的操作

文件的操作

1>     此事例操作的是text文件

2>     文件的操作有读取text内容,将内容写入到文件中,删除文件,创建文件

3>     新建一个控制器,名为rwfile.go.其代码如下:

package controllers

import (
	"fmt"
	"os"
	"io/ioutil"
	"github.com/astaxie/beego"
)

type ReadController struct {
	beego.Controller
}

//上传下载文件的页面
func (c *ReadController) Get() {
	
	c.TplName = "filerw.html"
}
//创建文件
type CreateController struct {
	beego.Controller
}
func (c *CreateController) Post(){
     //创建文件
	file, error := ioutil.TempFile("static/txtfile", "tmp")
	//文件关闭
	defer file.Close()
	if error != nil {
	   fmt.Println("创建文件失败")
	}
	c.Data["json"]=map[string]interface{}{"data":file.Name()};
	c.ServeJSON();
}
//写入文件
type WriteController struct {
	beego.Controller
}
func (c *WriteController) Post() { 
	confPath := c.GetString("path")
	info:=c.GetString("info")
	content,err := parseWriteConfig(confPath,info)
	if err != nil {
		fmt.Println(err)
    }
	fmt.Println(content)
	c.Data["json"]=map[string]interface{}{"data":string(content)};
	c.ServeJSON();
}

//写入text文件内容  
func parseWriteConfig(confPath,info string) ([]byte,error) {
	fl, err := os.OpenFile(confPath, os.O_APPEND|os.O_CREATE, 0644)
	if err != nil {
		fmt.Println("打开文件失败")
	}
	defer fl.Close()
	byteinfo:=[]byte (info)
	n, err := fl.Write(byteinfo)
	if err == nil && n < len(byteinfo) {
		fmt.Println("写入失败")
		fmt.Println(err)
	}
	return byteinfo, err
}

//读取文件内容
func (c *ReadController) Post() { 
	confPath := c.GetString("path")
	fmt.Println("文件的地址:")
	fmt.Println(confPath)
	content,err := ReadFile(confPath)
	if err != nil {
		c.Data["data"]="";
		fmt.Println(err) 
    } else{
		c.Data["data"]=content;
	}
	fmt.Println(content)
	c.Data["json"]=map[string]interface{}{"data":content};
	c.ServeJSON();
}
//解析text文件内容  
func ReadFile(path string) (str string, err error) {
	//打开文件的路径
	fi, err := os.Open(path)
	if err!=nil{
		fmt.Println("打开文件失败")
		fmt.Println(err)
	}
	defer fi.Close()
	//读取文件的内容
	fd, err := ioutil.ReadAll(fi)
	if err!=nil{
		fmt.Println("读取文件失败")
		fmt.Println(err)
	}
    str = string(fd)
    return str,err
}
//删除文件
type DeleteController struct {
	beego.Controller
}
func (c *DeleteController) Post(){
	isdel:=false;
	file:=c.GetString("path");           //源文件路径
    err := os.Remove(file)               //删除文件
    if err != nil {
        //删除失败,输出错误详细信息
        fmt.Println(err)
	}else {
        //如果删除成功则输出 
		isdel=true
    }
	c.Data["json"]=map[string]interface{}{"data":isdel};
	c.ServeJSON();
}

  

4>     新建一个filerw.html页面作为显示.其代码如下:

 

<!DOCTYPE html>
 
<html>
      <head>
        <title>首页 - 用户列表页面</title>
        <link rel="shortcut icon" href="/static/img/favicon.png" /> 
        <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css"/>
        <script type="text/javascript" src="/static/js/jquery-2.1.1.min.js"></script> 
        <script type="text/javascript" src="/static/bootstrap/js/bootstrap.min.js"></script> 
      </head>       
    <body>
       <div class="container">
<!--创建text文件-->
<div style="100%;height:50px;">
        <button onclick="createtxt()" class="btn btn-primary">创建text文件</button>
        <label id="txtname"></label>
     </div>
      <!--写入文件-->
      <div style="100%;height:300px;margin-top:20px;">
          <label>输入内容:</label>
          <textarea id="writeinfo" style="50%;height:200px;" class="form-control"></textarea>
          <button value="写入内容" onclick="txtwrite()" class="btn btn-primary" style="margin-top:20px;">写入内容</button>
      </div>
     
      <!--读取文件内容部分-->
      <div style="100%;height:300px;">
          <button value="读取内容" onclick="txtread()" class="btn btn-primary" style="margin-bottom:20px;">读取内容</button>            
          <textarea id="readinfo" style="50%;height:200px;" class="form-control" ></textarea>
      </div>
         
      <button onclick="deletetxt()" class="btn btn-primary">删除text文件</button>

       </div>
       
        <!--JS部分-->
        <script type="text/javascript">
        
          //创建text文件
          function createtxt(){
            $.ajax({
               type:'post',
               url:'/Home/FileCreate',
               data:{},
               success:function(result){
                   console.log('获取的数据')
                   console.log(result)
                 $("#txtname").html(result.data);
               } 
            })

          }
          //写入文件的内容
          function txtwrite(){
            $.ajax({
               type:'post',
               url:'/Home/FileWrite',
               data:{
                   "info":$("#writeinfo").val(),
                   "path":$("#txtname").html()
               },
               success:function(result){
                   console.log('获取的数据')
                   console.log(result)
                 $("#showinfo").html(result.data);
               } 
            })
          }
          //读取文件的内容
          function txtread(){
            $.ajax({
               type:'post',
               url:'/Home/FileRead',
               data:{
                 "path":$("#txtname").html()
               },
               success:function(result){
                  console.log('获取的数据')
                  console.log(result)
                  $("#readinfo").html(result.data);
               } 
            })
          }
          
           //删除text文件
           function deletetxt(){
            $.ajax({
               type:'post',
               url:'/Home/FileDelete',
               data:{
                   "path": $("#txtname").html()
               },
               success:function(result){
                   console.log('获取的数据')
                   console.log(result)
                   if(result.data){
                      $("#txtname").html('');
                      alert("删除成功");
                   }else{
                      alert("删除失败"); 
                   }                 
               } 
            })

          }
        </script>
    </body>
</html>

  

5>     在路由器router.go中添加路由.具体代码如下:

package routers

import (
	"secondweb/controllers"
	"github.com/astaxie/beego"
)

func init() {
	beego.Router("/", &controllers.MainController{})
	beego.Router("/Home/PageData", &controllers.UserController{})
	beego.Router("/Home/PageNextData", &controllers.YonghuController{})
	beego.Router("/Home/Index", &controllers.PageController{})
	beego.Router("/Home/EasyUI", &controllers.EasyUIController{})
	beego.Router("/Home/EasyUIData", &controllers.EasyUIDataController{})
	beego.Router("/Home/FileOpt", &controllers.FileOptUploadController{})
	beego.Router("/Home/FileDown", &controllers.FileOptDownloadController{})
	beego.Router("/Home/FileRead", &controllers.ReadController{})
	beego.Router("/Home/FileWrite", &controllers.WriteController{})
	beego.Router("/Home/FileCreate", &controllers.CreateController{})
	beego.Router("/Home/FileDelete", &controllers.DeleteController{})
}

  

6>     运行效果如下:

1->在浏览器中输入路由如下,具体的效果如下:

 

2->点击创建text文件,新增一个文件

 

 

3->输入内容,点击写入内容,将内容写入到新建的文件中

 

4->点击读取内容,将写入的内容读取出来

 

5->点击删除文件,删除新增的文件

 

 

7>     下一章,讲api的编写。

原文地址:https://www.cnblogs.com/tudaogaoyang/p/8021484.html