go 文件服务器 上传,golang做上传文件服务器文件处理问题

1.使用golang 做web服务器

2.客户端使用http put的形式,上传文件到此web服务器

3.假如上传的文件很大,服务器可否支持,比如上传到服务器100k大小后就,存一个chunk文件,然后释放那部分内存,以此类推(觉得类似于管道)

4.目前我知道 http.Request.Body 可以获取上传之后的文件具体内容,并且它是一个 io.ReadCloser类型

5.再问一下http.Request.Body是服务器这边全部接收到了内容之后才能读取到吗?

6.http.Request.ContentLength是如何得到的,是服务器这边全部接收到了内容之后算的?还是客户端那边带过来的

请大家看一下应该如何实现这个功能

我的实验代码也贴一下,大家看看有什么问题

package main

import (

"os"

"net/http"

"github.com/julienschmidt/httprouter"

"fmt"

)

func main() {

router := httprouter.New()

//注册上传路由,及处理方法

router.PUT("/upload_file/:file_name",handleUploadFile)

http.ListenAndServe("0.0.0.0:10086", router)

}

func handleUploadFile(rw http.ResponseWriter, req *http.Request, p httprouter.Params){

real_file_name := p.ByName("file_name")

defer req.Body.Close()

buf := make([]byte, 65536) // 64k per chunk

filename := fmt.Sprintf("./chunk/%s", real_file_name) //文件名

fmt.Println(filename)

//创建一个文件

file, _ := os.Create(filename)

defer file.Close()

num := 0

for {

num += 1

n, err := req.Body.Read(buf)

fmt.Printf("第%d次循环,读取%d个字节\n",num,n)

file.Write(buf[:n])

if err != nil {

fmt.Println(err)

break

}

}

rw.Write([]byte("done\n"))

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值