添加本地上传的功能
This commit is contained in:
@@ -2,10 +2,11 @@
|
||||
|
||||
## 概述
|
||||
|
||||
存储工具提供了文件上传和查看功能,支持OSS和MinIO两种存储方式,并提供HTTP处理器用于文件上传和代理查看。
|
||||
存储工具提供了文件上传和查看功能,支持 **本地文件夹(Local)**、OSS 和 MinIO 三种存储方式,并提供HTTP处理器用于文件上传和代理查看。
|
||||
|
||||
## 功能特性
|
||||
|
||||
- 支持本地文件夹存储(Local)
|
||||
- 支持OSS对象存储(阿里云、腾讯云、AWS、七牛云等)
|
||||
- 支持MinIO对象存储
|
||||
- 提供统一的存储接口
|
||||
@@ -17,6 +18,32 @@
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 0. 工厂调用方式(推荐)
|
||||
|
||||
当你使用 `factory` 黑盒模式时,外部项目无需关心底层是 Local/MinIO/OSS:
|
||||
|
||||
```go
|
||||
import (
|
||||
"context"
|
||||
"os"
|
||||
|
||||
"git.toowon.com/jimmy/go-common/factory"
|
||||
"git.toowon.com/jimmy/go-common/storage"
|
||||
)
|
||||
|
||||
fac, _ := factory.NewFactoryFromFile("./config.json")
|
||||
|
||||
f, _ := os.Open("test.jpg")
|
||||
defer f.Close()
|
||||
|
||||
objectKey := storage.GenerateObjectKeyWithDate("uploads/images", "test.jpg")
|
||||
url, err := fac.UploadFile(context.Background(), objectKey, f, "image/jpeg")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
_ = url
|
||||
```
|
||||
|
||||
### 1. 创建存储实例
|
||||
|
||||
```go
|
||||
@@ -42,6 +69,12 @@ minioStorage, err := storage.NewStorage(storage.StorageTypeMinIO, cfg)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// 创建本地存储实例
|
||||
localStorage, err := storage.NewStorage(storage.StorageTypeLocal, cfg)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
```
|
||||
|
||||
### 2. 上传文件
|
||||
@@ -76,6 +109,25 @@ if err != nil {
|
||||
fmt.Printf("File URL: %s\n", url)
|
||||
```
|
||||
|
||||
### 2.1 本地存储配置示例
|
||||
|
||||
`config.json` 增加 `localStorage` 配置段:
|
||||
|
||||
```json
|
||||
{
|
||||
"localStorage": {
|
||||
"baseDir": "./uploads",
|
||||
"publicURL": "http://localhost:8080/file?key={objectKey}"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
说明:
|
||||
- **baseDir**:文件保存根目录
|
||||
- **publicURL**:用于 `GetURL()` 返回对外可访问的 URL
|
||||
- 推荐配合本文的 `ProxyHandler`,示例 `http://localhost:8080/file?key={objectKey}`
|
||||
- `{objectKey}` 会自动做 `url.QueryEscape` 处理
|
||||
|
||||
### 3. 使用HTTP处理器上传文件
|
||||
|
||||
```go
|
||||
@@ -136,6 +188,10 @@ http.Handle("/file", proxyHandler)
|
||||
http.ListenAndServe(":8080", nil)
|
||||
```
|
||||
|
||||
**本地存储建议搭配:**
|
||||
- `POST /upload` 上传文件(返回 `url`)
|
||||
- `GET /file?key=...` 通过代理读取本地文件并返回二进制内容
|
||||
|
||||
**查看请求示例:**
|
||||
```
|
||||
GET /file?key=images/test.jpg
|
||||
|
||||
Reference in New Issue
Block a user