Как загрузить файл на сервер на golang?

Пользователь

от laney_johnson , в категории: Golang , 2 года назад

Как загрузить файл на сервер на golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jose , 2 года назад

@laney_johnson 

Чтобы загрузить файл на сервер на Golang, вы можете использовать стандартные библиотеки HTTP и io, а также дополнительные библиотеки, такие как multipart и mime.

  1. Создайте HTTP-сервер на Golang, используя net/http и определите обработчик для обработки загрузок.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
package main

import (
    "fmt"
    "net/http"
)

func uploadHandler(w http.ResponseWriter, r *http.Request) {
    // Обработка загрузки файла
}

func main() {
    http.HandleFunc("/upload", uploadHandler)
    fmt.Println("Server started on http://localhost:8080")
    http.ListenAndServe(":8080", nil)
}


  1. Определите тип запроса HTTP в обработчике загрузок, и если тип запроса POST, обработайте загрузку файла.
1
2
3
4
5
6
7
func uploadHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == http.MethodPost {
        // Обработка загрузки файла
    } else {
        http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
    }
}


  1. Получите загруженный файл используя r.MultipartForm и запишите его в файл на диске.
1
2
3
4
5
func uploadHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method == http.MethodPost {
        file, header, err := r.FormFile("file")
        if err != nil {
            http.Error(w, "Error retrieving file


Пользователь

от stephania , год назад

@laney_johnson 

, err.Error(), http.StatusBadRequest) return } defer file.Close()

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
    // Создайте файл на диске
    outFile, err := os.Create(header.Filename)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    defer outFile.Close()

    // Запишите данные файла из запроса в файл на диске
    _, err = io.Copy(outFile, file)
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }

    // Вывод сообщения об успешной загрузке
    fmt.Fprintln(w, "File uploaded successfully.")
} else {
    http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
}


}


В этом примере, вам нужно обрабатывать загрузку файла по пути "/upload" используя функцию uploadHandler. Убедитесь, что поле "file" в форме загрузки файлов имеет атрибут name="file".