Files Upload
Allows a user to upload images and files.
Single File
Section titled “Single File”Show Code
package main
import ( "fmt" "image" "path/filepath"
_ "image/gif" _ "image/jpeg" _ "image/png"
"fyne.io/fyne/v2" "fyne.io/fyne/v2/app" "fyne.io/fyne/v2/canvas" "fyne.io/fyne/v2/container" "fyne.io/fyne/v2/dialog" "fyne.io/fyne/v2/storage" "fyne.io/fyne/v2/widget")
func main() { myApp := app.NewWithID("com.example.fileupload") myWindow := myApp.NewWindow("File/Image Upload")
// Label to show file info or errors infoLabel := widget.NewLabel("No file selected")
// Placeholder for displaying images imageDisplay := canvas.NewImageFromResource(nil) imageDisplay.FillMode = canvas.ImageFillContain imageDisplay.SetMinSize(fyne.NewSize(200, 200))
// Button to open file dialog uploadButton := widget.NewButton("Upload File", func() { fd := dialog.NewFileOpen(func(reader fyne.URIReadCloser, err error) { if err != nil { // Handle unexpected dialog errors dialog.ShowError(fmt.Errorf("failed to open file: %w", err), myWindow) return } if reader == nil { // User cancelled selection infoLabel.SetText("No file selected") return } defer reader.Close()
// Check file extension ext := filepath.Ext(reader.URI().Name()) if ext != ".png" && ext != ".jpg" && ext != ".jpeg" && ext != ".gif" { infoLabel.SetText("Unsupported file type: " + ext) return }
// Decode image to verify it's valid img, _, imgErr := image.Decode(reader) if imgErr != nil { infoLabel.SetText("Error decoding image: " + imgErr.Error()) return }
// If valid, show image and file details imageDisplay.Image = img imageDisplay.Refresh()
fileInfo := fmt.Sprintf("File: %s\nSize: %dx%d px", reader.URI().Name(), img.Bounds().Dx(), img.Bounds().Dy()) infoLabel.SetText(fileInfo) }, myWindow)
// Set filter to only images fd.SetFilter(storage.NewExtensionFileFilter([]string{".png", ".jpg", ".jpeg", ".gif"})) fd.Show() })
// Layout content := container.NewVBox( uploadButton, infoLabel, imageDisplay, )
myWindow.SetContent(content) myWindow.Resize(fyne.NewSize(400, 400)) myWindow.ShowAndRun()}