잠시만 기다려 주세요

     '왜 이재명은 자꾸만 국민들 보고 길바닥에 나가라고 하는 건가.. 정작 당신들은 뜨뜻한 곳에서 입만 나불거리고 있으면서...'
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (19)  |  여러가지 팁 (1095)  |  추천 및 재미 (163)  |  자료실 (28)  |  
시사, 이슈, 칼럼, 평론, 비평 (795)  |  끄적거림 (142)  |  문예 창작 (719)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    golang

golang - golang multipart upload, 파일서버로 post 값 보내기, 멀티, 다중 파일 업로드
이 름 : 바다아이   |   조회수 : 11407         짧은 주소 : 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
번 호 카테고리 제 목 이름 조회수
180 golang golang ... 바다아이 121
179 golang golang , ... 바다아이 2701
178 golang golang , map . 바다아이 2093
177 golang Golang (, , data ) , ... 바다아이 2407
176 golang golang sort ... 바다아이 2790
175 golang golang html.EscapeString html.UnescapeString input value ... 바다아이 2713
174 golang golang go.mod go.sum . GOPATH SRC not module, 1.16 . 바다아이 6238
173 golang go 1.16 ... is not in GOROOT.. GOPATH .... . 바다아이 7389
172 golang , String Formatting 바다아이 8700
171 golang rand.Intn , random, , . 바다아이 8220
170 golang golang ... 바다아이 11979
169 golang golang gopath, goroot .. golang 바다아이 8948
168 golang golang ... Force download file example 바다아이 10977
167 golang golang , , cpu, memory, disk 바다아이 12040
166 golang golang , ... GOOS, GOARCH 바다아이 9699
165 golang golang checkbox ... 바다아이 9563
164 golang golang , , http .... 바다아이 9380
163 golang golang nil , nil , nil ... 바다아이 9461
162 golang 2 golang, go , .... golang .... 바다아이 12711
161 golang golang postgresql, mysql, mariadb ... ` Grave () .. .. 바다아이 10021
160 golang golang postgresql mysql, mariadb scan , null .. 바다아이 10085
159 golang golang , iconv 바다아이 12905
158 golang golang quote escape, unquote 바다아이 10323
157 golang golang , http errorLog , , ... 바다아이 10710
156 golang golang interface , 바다아이 9784
155 golang golang struct .... 바다아이 10506
154 golang golang map map , 바다아이 9988
153 golang golang map .... .... 바다아이 9311
152 golang golang slice copy 바다아이 9507
151 golang golang goto 바다아이 10698
| |









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