feat: support Remember Me for prolonging session validity on user/pass authentication (#52)
This commit is contained in:
committed by
GitHub
parent
473cd3f1ed
commit
873818ddac
149
docs/file_uploads.md
Normal file
149
docs/file_uploads.md
Normal file
@@ -0,0 +1,149 @@
|
||||
# File Uploads in go-unifi
|
||||
|
||||
This document describes how to use the file upload functionality in the go-unifi client.
|
||||
|
||||
## Overview
|
||||
|
||||
The go-unifi client provides two methods for uploading files to the UniFi controller:
|
||||
|
||||
1. `UploadFile` - Upload a file from a file path on disk
|
||||
2. `UploadFileFromReader` - Upload a file from an `io.Reader` (e.g., from memory, network stream, etc.)
|
||||
|
||||
Both methods use the `multipart/form-data` format for file uploads, which is required by the UniFi controller.
|
||||
|
||||
## Examples
|
||||
|
||||
### Uploading a file from disk
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"github.com/filipowm/go-unifi/unifi"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create a client
|
||||
client, err := unifi.NewClient(&unifi.ClientConfig{
|
||||
URL: "https://your-unifi-controller:8443",
|
||||
User: "your-username",
|
||||
Password: "your-password",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("Error creating client: %v", err)
|
||||
}
|
||||
|
||||
// Prepare any additional form fields if needed
|
||||
formFields := map[string]string{
|
||||
"description": "My uploaded file",
|
||||
}
|
||||
|
||||
// Upload the file to the controller
|
||||
var response map[string]interface{} // Adjust this type based on the expected response
|
||||
err = client.UploadFile(
|
||||
context.Background(),
|
||||
"/api/s/default/upload", // The API endpoint to upload to
|
||||
"/path/to/your/file.txt", // Path to the file on disk
|
||||
"file", // Form field name for the file
|
||||
formFields, // Additional form fields
|
||||
&response, // Response structure to capture the result
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("Error uploading file: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("Upload successful: %v", response)
|
||||
}
|
||||
```
|
||||
|
||||
### Uploading a file from memory
|
||||
|
||||
```go
|
||||
package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"log"
|
||||
|
||||
"github.com/paultyng/go-unifi/unifi"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// Create a client
|
||||
client, err := unifi.NewClient(&unifi.ClientConfig{
|
||||
URL: "https://your-unifi-controller:8443",
|
||||
User: "your-username",
|
||||
Password: "your-password",
|
||||
})
|
||||
if err != nil {
|
||||
log.Fatalf("Error creating client: %v", err)
|
||||
}
|
||||
|
||||
// Create file content in memory
|
||||
fileContent := []byte("This is some test content to upload")
|
||||
reader := bytes.NewReader(fileContent)
|
||||
|
||||
// Upload the file from the reader
|
||||
var response map[string]interface{} // Adjust this type based on the expected response
|
||||
err = client.UploadFileFromReader(
|
||||
context.Background(),
|
||||
"/api/s/default/upload", // The API endpoint to upload to
|
||||
reader, // Reader with the file content
|
||||
"myfile.txt", // Filename to use in the upload
|
||||
"file", // Form field name for the file
|
||||
nil, // No additional form fields
|
||||
&response, // Response structure to capture the result
|
||||
)
|
||||
if err != nil {
|
||||
log.Fatalf("Error uploading file: %v", err)
|
||||
}
|
||||
|
||||
log.Printf("Upload successful: %v", response)
|
||||
}
|
||||
```
|
||||
|
||||
## API Reference
|
||||
|
||||
### UploadFile
|
||||
|
||||
```go
|
||||
func (c *client) UploadFile(ctx context.Context, apiPath, filePath, fieldName string, formFields map[string]string, respBody interface{}) error
|
||||
```
|
||||
|
||||
Uploads a file to the UniFi controller from a file path.
|
||||
|
||||
Parameters:
|
||||
- `ctx`: The context for the request
|
||||
- `apiPath`: The API endpoint path to upload the file to
|
||||
- `filePath`: Path to the file on disk
|
||||
- `fieldName`: Form field name for the file (defaults to "file" if empty)
|
||||
- `formFields`: Additional form fields to include in the upload (can be nil)
|
||||
- `respBody`: Structure to decode the response into (can be nil)
|
||||
|
||||
### UploadFileFromReader
|
||||
|
||||
```go
|
||||
func (c *client) UploadFileFromReader(ctx context.Context, apiPath string, reader io.Reader, filename, fieldName string, formFields map[string]string, respBody interface{}) error
|
||||
```
|
||||
|
||||
Uploads a file to the UniFi controller from an io.Reader.
|
||||
|
||||
Parameters:
|
||||
- `ctx`: The context for the request
|
||||
- `apiPath`: The API endpoint path to upload the file to
|
||||
- `reader`: Reader with the file content
|
||||
- `filename`: Name of the file to use in the upload
|
||||
- `fieldName`: Form field name for the file (defaults to "file" if empty)
|
||||
- `formFields`: Additional form fields to include in the upload (can be nil)
|
||||
- `respBody`: Structure to decode the response into (can be nil)
|
||||
|
||||
## Notes
|
||||
|
||||
- These methods use `POST` requests for file uploads
|
||||
- The UniFi controller typically expects files to be uploaded with the field name "file", but this can be changed as needed
|
||||
- The content type for the request is automatically set to "multipart/form-data" with the correct boundary
|
||||
- All existing client features like interceptors, error handling, and request validation are preserved
|
||||
Reference in New Issue
Block a user