Files
ai-agent/internal/services/storage/local.go
T
mlogclub 5d7c10aeab refactor: rename agent widget references to AI agent for consistency
- Updated runtime configuration to use __CS_AI_AGENT_WIDGET_CONFIG__ instead of __CS_AGENT_WIDGET_CONFIG__.
- Changed message types in support host bridge from "cs-agent" to "cs-ai-agent".
- Minified SDK script updated to reflect new AI agent naming conventions.
- Adjusted scrollbar styles in main.scss to use .cs-ai-agent-scrollbar instead of .cs-agent-scrollbar.
2026-05-30 21:19:36 +08:00

71 lines
1.7 KiB
Go

package storage
import (
"cs-ai-agent/internal/pkg/config"
"cs-ai-agent/internal/pkg/enums"
"io"
"os"
"path/filepath"
"strings"
)
type LocalStorage struct {
cfg config.LocalStorageConfig
}
func NewLocalStorage(cfg config.LocalStorageConfig) *LocalStorage {
return &LocalStorage{cfg: cfg}
}
func (s *LocalStorage) ProviderType() enums.AssetProvider {
return enums.AssetProviderLocal
}
func (s *LocalStorage) Upload(reader io.Reader, key string, info UploadInfo) (*StoredFile, error) {
fullPath := filepath.Join(s.cfg.Root, filepath.FromSlash(key))
if err := os.MkdirAll(filepath.Dir(fullPath), 0755); err != nil {
return nil, err
}
dst, err := os.Create(fullPath)
if err != nil {
return nil, err
}
defer dst.Close()
if _, err := io.Copy(dst, reader); err != nil {
return nil, err
}
return &StoredFile{
Provider: enums.AssetProviderLocal,
StorageKey: key,
URL: strings.TrimRight(s.cfg.BaseURL, "/") + "/" + strings.TrimLeft(key, "/"),
Filename: info.Filename,
FileSize: info.FileSize,
MimeType: info.MimeType,
}, nil
}
func (s *LocalStorage) GetURL(key string) string {
baseURL := strings.TrimRight(strings.TrimSpace(s.cfg.BaseURL), "/")
return strings.TrimRight(baseURL, "/") + "/" + strings.TrimLeft(key, "/")
}
func (s *LocalStorage) GetSignedURL(key string) string {
return s.GetURL(key)
}
func (s *LocalStorage) Delete(key string) error {
fullPath := filepath.Join(s.cfg.Root, filepath.FromSlash(key))
if _, err := os.Stat(fullPath); os.IsNotExist(err) {
return nil
}
return os.Remove(fullPath)
}
func (s *LocalStorage) Read(key string) (io.ReadCloser, error) {
fullPath := filepath.Join(s.cfg.Root, filepath.FromSlash(strings.TrimSpace(key)))
return os.Open(fullPath)
}