잠시만 기다려 주세요

HOME   |  여기는?   |  바다물때표   |  여러가지 팁 (888)  |  추천 및 재미 (152)  |  자료실 (20)  |  끄적거림 (519)  |  시나리오 (760)  |  드라마 대본 (248)  |  

2020년 09월 22일
항상 깨어있지 않으면 시간은 너를 덮칠 것이고 오랜 후 깨어나면 이미 너의 인생은 반 이상이 흘러갔을 것.... 인생 짧다. 1분 1초 살아서 살자. - 바다아이
 




    golang

golang - golang multipart upload, 파일서버로 post 값 보내기, 멀티, 다중 파일 업로드
이 름 : 바다아이   |   조회수 : 2495         짧은 주소 : https://www.bada-ie.com/su/?551591780764
이렇게 하면 여러 서버에 파일을 전송할 수 있습니다.
일반 업로드 방식은 보통 클라이언트 form 에서 넘어온 파일을 받아서 처리합니다.
그런데 이것은 클라이언트가 아닌
golang 자체로 post 값을 직접 특정 서버로 보내 준다고 보시면 됩니다.
많은 응용이 가능하겠죠...

아래 예제에서는 locallhost 쪽으로 post 값을 보내는 예제입니다.
보내고 자신이 클라이언트가 되어 그 결과를 다시 받아서 출력해 주죠...
제일 밑에 보면 body 출력할 때 그쪽에서 처리한 내용을 출력해 줍니다.
만약 잘 업로드 되서 ok 라는 문자를 그 쪽에서 웹 브라우저로 출력 했다면 그 내용을 그대로 출력하는 것입니다.

extraParams 얘네들도 post 항목이 됩니다.
받는 서버 쪽에서 title := req.FormValue("title") 해서 받아보시면 title 값도 잘 출력됩니다.


package main

import (
	"bytes"
	"fmt"
	"io"
	"log"
	"mime/multipart"
	"net/http"
	"os"
	"path/filepath"
)

// Creates a new file upload http request with optional extra params
func newfileUploadRequest(uri string, params map[string]string, paramName string, path []string) (*http.Request, error) {

	body := &bytes.Buffer{}
	writer := multipart.NewWriter(body)

	for i := 0; i < len(path); i++ {
		file, err := os.Open(path[i])
		if err != nil {
			return nil, err
		}

		part, err := writer.CreateFormFile(paramName, filepath.Base(path[i]))
		if err != nil {
			return nil, err
		}
		_, err = io.Copy(part, file)

		file.Close()
	}

	for key, val := range params {
		_ = writer.WriteField(key, val)
	}

	err := writer.Close()
	if err != nil {
		return nil, err
	}

	req, err := http.NewRequest("POST", uri, body)
	req.Header.Set("Content-Type", writer.FormDataContentType())
	return req, err
}

func main() {
	var fileman []string

	// 보낼 파일
	path, _ := os.Getwd()
	fileman = append(fileman, path+"/1522222833_sea.mp4")
	fileman = append(fileman, path+"/1522222834.mp4")

	// 얘네들도 post 항목이 됩니다.... 단지 파일만 따로 post 변수 이름을 짓는 겁니다. 나머지는 모아서...
	// title, author 이런게 다 post 변수가 됩니다.
	extraParams := map[string]string{
		"title":       "My Document",
		"author":      "Matt Aimonetti",
		"description": "A document with all the Go programming language secrets",
	}
	request, err := newfileUploadRequest("http://localhost", extraParams, "파일post변수이름", fileman)
	if err != nil {
		log.Fatal(err)
	}
	client := &http.Client{}
	resp, err := client.Do(request)
	if err != nil {
		log.Fatal(err)
	} else {
		body := &bytes.Buffer{}
		_, err := body.ReadFrom(resp.Body)
		if err != nil {
			log.Fatal(err)
		}
		resp.Body.Close()
		fmt.Println(resp.StatusCode)
		fmt.Println(resp.Header)

		fmt.Println(body)
	}
}
참고 : https://gist.github.com/mattetti/5914158
| |


      1 page / 6 page
번 호 카테고리 제 목 이름 조회수
173 golang , String Formatting 바다아이 222
172 golang rand.Intn , random, , . 바다아이 239
171 golang golang ... 바다아이 1401
170 golang golang gopath, goroot .. 바다아이 1057
169 golang golang ... Force download file example 바다아이 1557
168 golang golang , , cpu, memory, disk 바다아이 2283
167 golang golang , ... GOOS, GOARCH 바다아이 1604
166 golang golang checkbox ... 바다아이 1842
165 golang golang , , http .... 바다아이 1775
164 golang golang nil , nil , nil ... 바다아이 1865
163 golang 2 golang, go , .... golang .... 바다아이 2671
162 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 1949
161 golang golang postgresql mysql, mariadb scan , null .. 바다아이 2042
160 golang golang , iconv 바다아이 2189
159 golang golang quote escape, unquote 바다아이 2103
158 golang golang , http errorLog , , ... 바다아이 2208
157 golang golang interface , 바다아이 2143
156 golang golang struct .... 바다아이 2271
155 golang golang map map , 바다아이 2127
154 golang golang map .... .... 바다아이 2097
153 golang golang slice copy 바다아이 2056
152 golang golang goto 바다아이 2141
151 golang golang slice sort , int, string, float64 바다아이 2206
150 golang URL Parsing, url . parse 바다아이 2264
149 golang golang , interface{} ... 바다아이 2189
148 golang golang interface to string, , , map slice json 바다아이 2039
147 golang golang How to convert JSON string to map and slice, json 바다아이 2188
146 golang golang , file write, Writing Files 바다아이 2318
145 golang golang Insert Line or String to File, , , , , 바다아이 2068
144 golang golang replace 바다아이 2147
| |








Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ FreeBSD + GoLang + PostgreSQL ]
서버위치 : 구글 클라우드 플랫폼  실행시간 : 0.05706
to webmaster... gogo sea. gogo sea.