Beego 學習筆記12:文件的操作

来源:http://www.cnblogs.com/tudaogaoyang/archive/2017/12/11/8021484.html
-Advertisement-
Play Games

文件的操作 1> 此事例操作的是text文件 2> 文件的操作有讀取text內容,將內容寫入到文件中,刪除文件,創建文件 3> 新建一個控制器,名為rwfile.go.其代碼如下: 4> 新建一個filerw.html頁面作為顯示.其代碼如下: 5> 在路由器router.go中添加路由.具體代碼如 ...


文件的操作

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="width:100%;height:50px;">
        <button onclick="createtxt()" class="btn btn-primary">創建text文件</button>
        <label id="txtname"></label>
     </div>
      <!--寫入文件-->
      <div style="width:100%;height:300px;margin-top:20px;">
          <label>輸入內容:</label>
          <textarea id="writeinfo" style="width:50%;height:200px;" class="form-control"></textarea>
          <button value="寫入內容" onclick="txtwrite()" class="btn btn-primary" style="margin-top:20px;">寫入內容</button>
      </div>
     
      <!--讀取文件內容部分-->
      <div style="width:100%;height:300px;">
          <button value="讀取內容" onclick="txtread()" class="btn btn-primary" style="margin-bottom:20px;">讀取內容</button>            
          <textarea id="readinfo" style="width: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的編寫。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫在前面 這個文章,展現的是一個實現Promise的思路,以及如何發現和處理問題的情境。 從現有的Promise分析 如果我們想要自己實現一個簡單的 ,那現有規範規定的 肯定是我們最好的參照。 我們先看下 怎麼使用: 來看下返回的 是什麼,以及它的結構是怎麼樣的: 再進行一些具體操作 從Promis ...
  • 1.(webpack)vue-cli構建的項目如何設置每個頁面的title 在路由里每個都添加一個meta 鉤子函數: 在main.js中添加如下代碼 2.vue項目中使用axios上傳圖片等文件 首先安裝axios:1.利用npm安裝npm install axios –save2.利用bower ...
  • 對於平時項目開發中,經常要展示圖片。什麼水平居中顯示,垂直居中顯示,水平或垂直居中顯示...我們的髮際線就是這樣往後退的。 接下來要講的就是對於各種圖片佈局的css實現(這裡針對的是img標簽的不會使用到background) 1.最簡單的水平居中 .exa1{ width: 500px; heig ...
  • 1、安裝 nvm curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash 安裝成功預設將會在用戶文件夾中生成一個隱藏的 .nvm 文件 顯示隱藏文件:defaults write com. ...
  • DOM(文檔對象模型)是針對HTML和XML文檔的一個API,描繪了一個層次化的節點樹,允許開發人員添加、刪除和修改頁面的某一部分。 HTML DOM 樹形結構如下: 1.Node方面 1.1 節點類型 確定節點類型,相容的方法是將nodeType屬性與數字值進行比較,如下所示: if(someNo ...
  • 設計模式中的單例模式可以有7種寫法,這7種寫法有各自的優點和缺點: 代碼示例(java)及其分析如下: 一、懶漢式 優點:   不是馬上就初始化的,當需要使用的時候才進行初始化(即是lazy loading) 缺點:   在併發情況下是線程不安全的 二、懶漢式 ...
  • 自己實現一個簡單的線程池 public interface ThreadPool { // 啟動 void execute(Job job); // 關閉 void shutDown(); // 增加線程 void addWorkThread(int num); // 減少線程 void reduc ...
  • 配套詳解視頻 局部代碼塊與初始化代碼塊 面向對象-靜態代碼塊 代碼塊總結 組合關係與類的載入 靜態代碼塊及欄位初始化練習 一、什麼是代碼塊 在類中或方法當中 使用{}括起來的一段代碼 就稱它是一個代碼塊 在代碼塊當中定義的變數我們稱是局部變數,在外面是沒有辦法使用的。這裡定義的a就是一個局部變數 代 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...