잠시만 기다려 주세요

     '이태원 150명 넘게 죽은 핼러윈 참사.. 오세훈 탄핵.. 윤석열 탄핵.... 행안부 장관 이상민은 사람이냐... 말만 하면 책임 회피..'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (16)  |  여러가지 팁 (1059)  |  추천 및 재미 (156)  |  자료실 (22)  |  
시사, 이슈, 칼럼, 평론, 비평 (613)  |  끄적거림 (136)  |  문예 창작 (716)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - golang multipart upload, 파일서버로 post 값 보내기, 멀티, 다중 파일 업로드
이 름 : 바다아이   |   조회수 : 10186         짧은 주소 : 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
번 호 카테고리 제 목 이름 조회수
179 golang golang , ... 바다아이 1851
178 golang golang , map . 바다아이 1427
177 golang Golang (, , data ) , ... 바다아이 1509
176 golang golang sort ... 바다아이 1749
175 golang golang html.EscapeString html.UnescapeString input value ... 바다아이 1842
174 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 5154
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 6058
172 golang , String Formatting 바다아이 7703
171 golang rand.Intn , random, , . 바다아이 7160
170 golang golang ... 바다아이 10298
169 golang golang gopath, goroot .. golang 바다아이 7809
168 golang golang ... Force download file example 바다아이 9623
167 golang golang , , cpu, memory, disk 바다아이 10891
166 golang golang , ... GOOS, GOARCH 바다아이 8641
165 golang golang checkbox ... 바다아이 8402
164 golang golang , , http .... 바다아이 8175
163 golang golang nil , nil , nil ... 바다아이 8513
162 golang 2 golang, go , .... golang .... 바다아이 11410
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 8722
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 8857
159 golang golang , iconv 바다아이 11656
158 golang golang quote escape, unquote 바다아이 9117
157 golang golang , http errorLog , , ... 바다아이 9192
156 golang golang interface , 바다아이 8614
155 golang golang struct .... 바다아이 9355
154 golang golang map map , 바다아이 8828
153 golang golang map .... .... 바다아이 8347
152 golang golang slice copy 바다아이 8474
151 golang golang goto 바다아이 9359
150 golang golang slice sort , int, string, float64 바다아이 8838
| |









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