Hướng dẫn tạo form upload nhiều hình ảnh bằng Golang

Hướng dẫn chi tiết cách tạo form để upload nhiều hình ảnh cùng lúc trong Golang bằng cách sử dụng thư viện `net/http`.

Trong bài viết này, chúng ta sẽ học cách tạo một form HTML để upload nhiều hình ảnh, sau đó xử lý các file hình ảnh này bằng Golang. Chúng ta sẽ sử dụng thư viện net/http để quản lý việc nhận dữ liệu từ form và lưu trữ các hình ảnh vào thư mục đích.

Mã Golang:

package main

import (
	"fmt"
	"io"
	"net/http"
	"os"
	"path/filepath"
)

func uploadHandler(w http.ResponseWriter, r *http.Request) {
	// Giới hạn kích thước của bộ nhớ tạm để xử lý upload
	r.ParseMultipartForm(10 << 20)

	// Lấy các file upload từ form
	files := r.MultipartForm.File["files"]

	for _, fileHeader := range files {
		// Mở file được upload
		file, err := fileHeader.Open()
		if err != nil {
			http.Error(w, "Không thể mở file", http.StatusInternalServerError)
			return
		}
		defer file.Close()

		// Tạo file mới để lưu trữ
		dst, err := os.Create(filepath.Join("uploads", fileHeader.Filename))
		if err != nil {
			http.Error(w, "Không thể lưu file", http.StatusInternalServerError)
			return
		}
		defer dst.Close()

		// Sao chép nội dung của file được upload vào file mới
		if _, err := io.Copy(dst, file); err != nil {
			http.Error(w, "Không thể sao chép file", http.StatusInternalServerError)
			return
		}
	}

	fmt.Fprintln(w, "Upload thành công!")
}

func main() {
	// Tạo thư mục lưu trữ nếu chưa có
	os.MkdirAll("uploads", os.ModePerm)

	// Định nghĩa handler cho đường dẫn /upload
	http.HandleFunc("/upload", uploadHandler)

	// Tạo trang HTML cho form upload
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintln(w, `<html><body>
			<form action="/upload" method="post" enctype="multipart/form-data">
				Chọn nhiều hình ảnh: <input type="file" name="files" multiple>
				<input type="submit" value="Upload">
			</form>
			</body></html>`)
	})

	fmt.Println("Server đang chạy tại http://localhost:8080")
	http.ListenAndServe(":8080", nil)
}

Giải thích chi tiết từng dòng code:

  1. r.ParseMultipartForm(10 << 20): Giới hạn kích thước của bộ nhớ tạm để xử lý file upload là 10MB.
  2. files := r.MultipartForm.File["files"]: Lấy danh sách các file được upload từ form.
  3. os.Create(filepath.Join("uploads", fileHeader.Filename)): Tạo một file mới trong thư mục "uploads" để lưu file upload.
  4. io.Copy(dst, file): Sao chép nội dung từ file upload vào file mới trên server.
  5. http.HandleFunc("/upload", uploadHandler): Xác định đường dẫn xử lý yêu cầu upload hình ảnh.
  6. http.ListenAndServe(":8080", nil): Khởi động server tại cổng 8080.

Yêu cầu hệ thống:

  • Go phiên bản 1.16 trở lên

Cách cài đặt Golang:

Tải và cài đặt Golang từ trang web chính thức Go.

Lời khuyên:

  • Đảm bảo thư mục "uploads" có quyền ghi để lưu trữ file upload.
  • Kiểm tra kích thước và loại file trước khi lưu trữ để tránh lỗi bảo mật.
Tags: Golang, Upload


Các Hướng Dẫn Cùng Chủ Đề Đang Xem

Cách INSERT dữ liệu vào database MySQL bằng Golang

Hướng dẫn cách sử dụng Prepared Statements trong Golang để thực hiện thao tác INSERT dữ liệu vào database MySQL với nhiều tham số.
Slices trong Golang: Cách sử dụng và ví dụ

Bài viết này hướng dẫn cách sử dụng `slices` trong Golang, bao gồm cách khai báo, truy cập, và thao tác với slices - một tính năng linh hoạt giúp quản lý mảng hiệu quả hơn trong Go.
Cách chuyển đổi chuỗi Markdown sang HTML bằng Golang

Hướng dẫn chi tiết cách chuyển đổi một chuỗi Markdown sang HTML trong Golang bằng cách sử dụng thư viện `blackfriday`.
Cách ghi nội dung vào file Excel bằng Golang

Hướng dẫn chi tiết cách ghi dữ liệu vào file Excel bằng ngôn ngữ lập trình Golang sử dụng thư viện excelize.
Cách SELECT dữ liệu từ database MySQL bằng Golang

Hướng dẫn cách sử dụng Golang để truy vấn dữ liệu từ MySQL database bằng Prepared Statements với nhiều tham số.
Gửi đoạn mã JavaScript vào website bằng Golang sử dụng Selenium

Hướng dẫn cách sử dụng Selenium trong Golang để gửi đoạn mã JavaScript vào một website trên trình duyệt Chrome. Bài viết sẽ cung cấp mã nguồn cụ thể và giải thích chi tiết.
Các chức năng thường dùng khi sử dụng Selenium Chrome trong Golang

Bài viết này tổng hợp các chức năng thường dùng khi làm việc với Selenium Chrome trong Golang, bao gồm cách cài đặt, tạo phiên làm việc, điều hướng trang web, và tương tác với các phần tử trên trang.
Tạo ứng dụng chat đơn giản sử dụng Socket.IO trong Golang

Hướng dẫn chi tiết từng bước để xây dựng ứng dụng chat đơn giản sử dụng Socket.IO trong Golang, giúp bạn hiểu cách thức hoạt động của giao tiếp thời gian thực trong các ứng dụng web.
Cách DELETE dữ liệu từ database MySQL bằng Golang

Hướng dẫn cách kết nối và xóa dữ liệu từ một bảng trong database MySQL bằng ngôn ngữ lập trình Golang.
Hướng dẫn đọc nội dung file Excel bằng Golang

Hướng dẫn chi tiết cách đọc nội dung từ file Excel (.xlsx, .xls) bằng Golang, sử dụng thư viện excelize với các bước cài đặt và ví dụ minh họa cụ thể.

Đã thêm vào giỏ hàng