golang文件上传服务器,golang-文件上传

package handler

import (

"encoding/json"

"io"

"io/ioutil"

"log"

"net/http"

"os"

)

// UploadHandler 上传接口

func UploadHandler(w http.ResponseWriter, r *http.Request) {

if r.Method == "GET" {

// 返回上传html页面

data, err := ioutil.ReadFile("./static/view/index.html")

if err != nil {

log.Printf("UploadHandler -> {%s}", err)

_, _ = io.WriteString(w, "服务器错误")

return

}

_, _ = io.WriteString(w, string(data))

} else if r.Method == "POST" {

// 接收文件流

file, fileHeader, err := r.FormFile("file")

if err != nil {

log.Printf("UploadHandler: 上传文件出错 -> {%s}", err)

_, _ = io.WriteString(w, "上传文件出错!")

return

}

defer file.Close()

headerByte, _ := json.Marshal(fileHeader.Header)

log.Printf("当前文件:Filename - >{%s}, Size -> {%v}, FileHeader -> {%s}", fileHeader.Filename, fileHeader.Size, string(headerByte))

newFile, err := os.Create("/temp/" + fileHeader.Filename)

if err != nil {

log.Printf("UploadHandler: 创建文件失败!")

_, _ = io.WriteString(w, "服务器错误!")

return

}

defer newFile.Close()

// 复制文件到目标目录

_, errCopy := io.Copy(newFile, file)

if errCopy != nil {

log.Printf("UploadHandler: 文件复制失败! -> {%s}", err)

_, _ = io.WriteString(w, "服务器错误!")

return

}

// 成功响应

// 重定向到这个请求

http.Redirect(w, r, "/file/upload/suc", http.StatusFound)

}

}

// UploadSuccessHandler 响应

func UploadSuccessHandler(w http.ResponseWriter, r *http.Request) {

_, _ = io.WriteString(w, "Upload finished!")

}

测试主函数

package main

import (

"filestore-server/handler"

"fmt"

"net/http"

)

func main() {

// http.HandleFunc 指定路由规则

// 上传文件

http.HandleFunc("/file/upload", handler.UploadHandler)

// 上传成功响应,/file/upload 请求处理成功后,会重定向到这个该请求

http.HandleFunc("/file/upload/suc", handler.UploadSuccessHandler)

err := http.ListenAndServe(":8080", nil)

if err != nil {

fmt.Printf("启动服务器失败: %s", err.Error())

}

}

有疑问加站长微信联系(非本文作者)

鉴于你提供的资料中没有明确的问题,我将基于提供的引用内容为你提供一个回答。 引用中提到了一个使用golang实现的文件服务,包括上传和下载功能的服务器端和客户端。这个文件服务可以用于在客户端显示图片列表,并且保护文件服务器的地址不被暴露出来。具体实现的代码可以参考引用中的示例,其中使用了`os.Args`来获取当前可执行程序的路径,并通过`http.Handle()`和`http.ListenAndServe()`开启了一个文件服务器监听在8088端口。所以,如果你想实现一个golang文件服务器,你可以参考这个示例代码。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [golang 文件服务器](https://blog.csdn.net/weixin_31211703/article/details/119474361)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [golang文件服务器的两种方式(可以访问任何目录)](https://blog.csdn.net/n_fly/article/details/115495514)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值