激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Golang - Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

2022-01-22 16:21尹東勛 Golang

本文主要介紹了Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文介紹如何通過 rk-boot 快速搭建靜態(tài)文件下載 Web 服務(wù)。什么是 靜態(tài)文件下載 Web UI?通過配置文件,快速搭建可下載文件的 Web 服務(wù)。

Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

請?jiān)L問如下地址獲取完整教程:

rkdocs.netlify.app/cn

 

安裝

go get github.com/rookie-ninja/rk-boot

 

快速開始

rk-boot 提供了一個(gè)方便的方法,讓用戶快速實(shí)現(xiàn)網(wǎng)頁【瀏覽和下載】靜態(tài)文件的功能。

目前,rk-boot 支持如下文件源。如果用戶希望支持更多的文件源,可以通過實(shí)現(xiàn) http.FileSystem 接口來實(shí)現(xiàn)。

  • 本地文件系統(tǒng)
  • pkger

1.創(chuàng)建 boot.yaml

---
gin:
- name: greeter                     # Required
  port: 8080                        # Required
  enabled: true                     # Required
  static:
    enabled: true                   # Optional, default: false
    path: "/rk/v1/static"           # Optional, default: /rk/v1/static
    sourceType: local               # Required, options: pkger, local
    sourcePath: "."                 # Required, full path of source directory

2.創(chuàng)建 main.go

// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.
package main

import (
"context"
"github.com/rookie-ninja/rk-boot"
)

// Application entrance.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()

// Bootstrap
boot.Bootstrap(context.Background())

// Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}

3.文件夾結(jié)構(gòu)

.
├── boot.yaml
├── go.mod
├── go.sum
└── main.go

0 directories, 4 files

4.驗(yàn)證

訪問 http://localhost:8080/rk/v1/static

Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

 

從 pkger 讀取文件 (嵌入式靜態(tài)文件)

pkger 是一個(gè)可以把靜態(tài)文件,嵌入到 .go 文件的工具。

這個(gè)例子中,我們把當(dāng)前文件夾下的所有文件,都嵌入到 pkger.go 文件中。

這樣做的好處就是,在部署的時(shí)候,可以不用考慮復(fù)制一堆文件夾結(jié)構(gòu)。

1.下載 pkger 命令行

go get github.com/markbates/pkger/cmd/pkger

2.創(chuàng)建 boot.yaml

pkger 會(huì)使用 module 來區(qū)分不同的 package,所以,sourcePath 里,我們添加了相應(yīng) module 的前綴。

---
gin:
- name: greeter                                             # Required
  port: 8080                                                # Required
  enabled: true                                             # Required
  static:
    enabled: true                                           # Optional, default: false
    path: "/rk/v1/static"                                   # Optional, default: /rk/v1/static
    sourceType: pkger                                       # Required, options: pkger, local
    sourcePath: "github.com/rookie-ninja/rk-demo:/"         # Required, full path of source directory

3.創(chuàng)建 main.go

代碼中,有兩個(gè)地方需要注意。

pkger.Include("./")
這段代碼不做任何事情,是告訴 pkger 命令行打包哪些文件。

_ “github.com/rookie-ninja/rk-demo/internal”
一定要這么引入,因?yàn)槲覀儠?huì)把 pkger.go 文件放到 internal/pkger.go 中,pkger.go 文件里定一個(gè)一個(gè) variable,只有這么引入,才可以在編譯 main.go 的時(shí)候,順利引入 variable。

// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.
package main

import (
"context"
"github.com/markbates/pkger"
"github.com/rookie-ninja/rk-boot"
// Must be present in order to make pkger load embedded files into memory.
_ "github.com/rookie-ninja/rk-demo/internal"
)

func init() {
// This is used while running pkger CLI
pkger.Include("./")
}

// Application entrance.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()

// Bootstrap
boot.Bootstrap(context.Background())

// Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}

4.生成 pkger.go

pkger -o internal

5.文件夾結(jié)構(gòu)

.
├── boot.yaml
├── go.mod
├── go.sum
├── internal
│   └── pkged.go
└── main.go

1 directory, 5 files

6.驗(yàn)證

訪問 http://localhost:8080/rk/v1/static

Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

 

自定義文件源

我們將使用 afero package 里面的 memFs 作為例子。

如果想要從類似 AWS S3 中讀取,用戶可以實(shí)現(xiàn)一個(gè)屬于自己的 http.FileSystem。

rk-boot 會(huì)在后續(xù)的更新中,逐漸實(shí)現(xiàn)這些功能。

1.創(chuàng)建 boot.yaml

---
gin:
- name: greeter                     # Required
  port: 8080                        # Required
  enabled: true                     # Required

2.創(chuàng)建 main.go

我們在 memFs 中創(chuàng)建了一個(gè) /folder 文件夾和 一個(gè) /file.txt 文件。

// Copyright (c) 2021 rookie-ninja
//
// Use of this source code is governed by an Apache-style
// license that can be found in the LICENSE file.
package main

import (
"context"
"github.com/rookie-ninja/rk-boot"
"github.com/rookie-ninja/rk-gin/boot"
"github.com/spf13/afero"
"os"
)

// Application entrance.
func main() {
// Create a new boot instance.
boot := rkboot.NewBoot()

// Create a memory fs
fs := afero.NewHttpFs(afero.NewMemMapFs())

// Add folder and file.txt into memory fs
fs.MkdirAll("/folder", os.ModePerm)
f, _ := fs.Create("/file.txt")
f.Write([]byte("this is my content!"))
f.Close()

// Set StaticFileEntry
ginEntry := boot.GetGinEntry("greeter")
ginEntry.StaticFileEntry = rkgin.NewStaticFileHandlerEntry(
rkgin.WithPathStatic("/rk/v1/static"),
rkgin.WithFileSystemStatic(fs))

// Bootstrap
boot.Bootstrap(context.Background())

// Wait for shutdown sig
boot.WaitForShutdownSig(context.Background())
}

3.驗(yàn)證

訪問 http://localhost:8080/rk/v1/static

Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)

到此這篇關(guān)于Gin 框架快速創(chuàng)建靜態(tài)文件下載Web服務(wù)的文章就介紹到這了,更多相關(guān)Gin靜態(tài)文件下載內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://juejin.cn/post/7039594150022348837

延伸 · 閱讀

精彩推薦
  • Golanggolang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法

    今天小編就為大家分享一篇golang json.Marshal 特殊html字符被轉(zhuǎn)義的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧 ...

    李浩的life12792020-05-27
  • GolangGolang通脈之?dāng)?shù)據(jù)類型詳情

    Golang通脈之?dāng)?shù)據(jù)類型詳情

    這篇文章主要介紹了Golang通脈之?dāng)?shù)據(jù)類型,在編程語言中標(biāo)識(shí)符就是定義的具有某種意義的詞,比如變量名、常量名、函數(shù)名等等,Go語言中標(biāo)識(shí)符允許由...

    4272021-11-24
  • Golanggolang如何使用struct的tag屬性的詳細(xì)介紹

    golang如何使用struct的tag屬性的詳細(xì)介紹

    這篇文章主要介紹了golang如何使用struct的tag屬性的詳細(xì)介紹,從例子說起,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看...

    Go語言中文網(wǎng)11352020-05-21
  • GolangGolang中Bit數(shù)組的實(shí)現(xiàn)方式

    Golang中Bit數(shù)組的實(shí)現(xiàn)方式

    這篇文章主要介紹了Golang中Bit數(shù)組的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    天易獨(dú)尊11682021-06-09
  • Golanggolang的httpserver優(yōu)雅重啟方法詳解

    golang的httpserver優(yōu)雅重啟方法詳解

    這篇文章主要給大家介紹了關(guān)于golang的httpserver優(yōu)雅重啟的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,...

    helight2992020-05-14
  • Golanggolang 通過ssh代理連接mysql的操作

    golang 通過ssh代理連接mysql的操作

    這篇文章主要介紹了golang 通過ssh代理連接mysql的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    a165861639710342021-03-08
  • Golanggo日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    go日志系統(tǒng)logrus顯示文件和行號(hào)的操作

    這篇文章主要介紹了go日志系統(tǒng)logrus顯示文件和行號(hào)的操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧...

    SmallQinYan12302021-02-02
  • Golanggo語言制作端口掃描器

    go語言制作端口掃描器

    本文給大家分享的是使用go語言編寫的TCP端口掃描器,可以選擇IP范圍,掃描的端口,以及多線程,有需要的小伙伴可以參考下。 ...

    腳本之家3642020-04-25
主站蜘蛛池模板: 在线成人www免费观看视频 | 国产资源在线播放 | 日本网站一区 | free台湾极品性hd | 精品在线观看一区二区 | 在线播放黄色网址 | 久久亚洲精品久久国产一区二区 | 欧洲成人在线视频 | 欧美一级片 在线播放 | 欧美激情综合在线 | 黑人一区二区三区四区五区 | 亚洲综合视频网 | 中文字幕免费在线观看视频 | 最新91在线视频 | 久色成人网 | 免费观看9x视频网站在线观看 | 久久精品超碰 | 国产精品午夜小视频观看 | 国内毛片视频 | 久久成人福利 | 久久精品视频3 | 亚洲视频欧美 | 美国一级毛片片aa久久综合 | 毛片区 | 久色porn | 国产一级毛片高清视频 | 二级大黄大片高清在线视频 | 久久国产精品无码网站 | 性欧美在线视频 | 久久一区三区 | 免费久久久| 国产毛片毛片毛片 | www.99xxxx.com| 精品一区二区久久久久 | 久久精品一二三区白丝高潮 | 久久国产精品成人免费网站 | 日韩av电影在线免费观看 | 精品国产乱码久久久久久久 | av在线免费看网站 | 日日做夜夜操 | 羞羞答答tv |