go语言上传本地文件到指定的服务器

Go语言图片上传与删除
本文介绍了一个使用Go语言编写的简单程序,该程序能够遍历指定目录下的所有图片文件(包括.jpg、.png、.jpeg和.bmp格式),并将其上传到服务器。上传成功后,程序会自动删除已上传的图片。服务器端使用ThinkPHP接收并处理这些图片。
package main

import (
	"bytes"
	"fmt"
	"io/ioutil"
	"net/http"
	"os"
	"path"
	"path/filepath"
	"strings"
	"time"
)
func main() {

	done := make(chan bool, 1)
	go f(done)
	<-done
}
func f(done chan bool)  {
	for  {
		var files []string

		//root := "D:\\picture"
		pwd,_ := os.Getwd() //获取当前目录
		err := filepath.Walk(pwd, func(path string, info os.FileInfo, err error) error {
			files = append(files, path)
			return nil
		})
		if err != nil {
			panic(err)
		}
		for _, file := range files {
			//fmt.Println(file)
			fileType:=path.Ext(file)
			if fileType==".jpg" || fileType==".png" || fileType==".jpeg"  || fileType==".Bmp"  {
				postFile(file)
				remove(file)
			}

		}
	}
	done <- true
}
func remove(file string)  {
	err := os.Remove(file)               //删除文件test.txt
	if err != nil {
		//如果删除失败则输出 file remove Error!
		fmt.Println("file remove Error!")
		//输出错误详细信息
		fmt.Printf("%s", err)
	} else {
		//如果删除成功则输出 file remove OK!
		fmt.Print("file remove OK!")
	}
}
//以二进制格式上传文件
func postFile(img string){
	//img:="D:\\desk999\\ax\\12222222222.jpg"
	//这是一个Post 参数会被返回的地址
	name:=filepath.Base(img)
	fileType:=path.Ext(name)
	fileNameOnly:=strings.TrimSuffix(name, fileType)
	/*fmt.Printf("fileNameWithSuffix==%s\n fileType==%s;\n fileNameOnly==%s;",
		name,fileType[1:],fileNameOnly)*/
	uri:="http://域名/api/Test/go/name/"+fileNameOnly+"/type/"+fileType[1:]
	byte,err:=ioutil.ReadFile(img)
	res,err :=http.Post(uri,"application/json",bytes.NewReader(byte))
	if err !=nil {
		fmt.Println("err=",err)
	}
	//http返回的response的body必须close,否则就会有内存泄露
	defer func() {
		res.Body.Close()
		fmt.Println("upload OK!")
	}()
	//读取body
	body,err:=ioutil.ReadAll(res.Body)
	if err!=nil {
		fmt.Println(" post err=",err)
	}
	fmt.Println(string(body))
	time.Sleep(5 * time.Second)
}

图片上传成功后自动删除,接受端我是用thinkphp实现的代码如下

public function go(){
        $data = file_get_contents('php://input');
        if($this->request->param('name',false)){
            $file_name=$this->request->param('name',false).'.'.$this->request->param('type',false);
        }else{
            $file_name=false;
        }
        $url=$this->dataToImage($data,$file_name);
        $this->success('请求成功',['img_url'=>$url]);

    }
    /**
     * 二进制转图片
     */
    public function dataToImage($data,$name=false){
        $m=$this->request->param('m',1);
        $ym=date('Ymd');
        $filepath=ROOT_PATH.'public'.DIRECTORY_SEPARATOR.'uploads'.DIRECTORY_SEPARATOR.'go'.DIRECTORY_SEPARATOR.$ym.DIRECTORY_SEPARATOR;
        if (!file_exists($filepath)) {
            mkdir($filepath,0755,true);//创建目录
        }
        if($name){
            $filename=$name;
        }else{
            $filename=time().rand(1000,9999).'-'.$m.'.jpg';
        }
        //file_put_contents($filepath.$filename,$base64_img);
        $fp=@fopen($filepath.$filename,"a+");
        @fputs($fp,$data);
        @fclose($fp);
        $img_url=$this->request->scheme().'://'.$_SERVER['HTTP_HOST'].'/uploads/go/'.$ym.'/'.$filename;
        return $img_url;
    }

本地windows 10系统后台运行的话,编译的时候执行

go build -ldflags "-H windowsgui" -o "uplodImg.exe"  file.go

 刚入门学习go语言,仅供学习使用

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

oraclechaozi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值