Browse Source

change

master
godo 9 months ago
parent
commit
9e19955c70
  1. 8
      frontend/src/stores/localchat.ts
  2. 6
      godo/localchat/filedown.go
  3. 67
      godo/localchat/getfiles.go

8
frontend/src/stores/localchat.ts

@ -430,10 +430,10 @@ export const useLocalChatStore = defineStore('localChatStore', () => {
//console.log(coms) //console.log(coms)
notifyError("确认失败!") notifyError("确认失败!")
} else { } else {
item.content.status = 'accessing' // item.content.status = 'accessing'
//console.log(item) // //console.log(item)
await db.update('chatmsg', item.id, toRaw(item)) // await db.update('chatmsg', item.id, toRaw(item))
await getMsgList() // await getMsgList()
//notifySuccess("确认成功!") //notifySuccess("确认成功!")
} }
} }

6
godo/localchat/filedown.go

@ -42,7 +42,7 @@ func downloadFiles(msg UdpMessage) error {
if err != nil { if err != nil {
return fmt.Errorf("failed to marshal post data: %v", err) return fmt.Errorf("failed to marshal post data: %v", err)
} }
log.Printf("Sending POST request to %s with data: %s", postUrl, string(postData))
resp, err := http.Post(postUrl, "application/json", bytes.NewBuffer(postData)) resp, err := http.Post(postUrl, "application/json", bytes.NewBuffer(postData))
if err != nil { if err != nil {
return fmt.Errorf("failed to make POST request: %v", err) return fmt.Errorf("failed to make POST request: %v", err)
@ -84,12 +84,12 @@ func handleResponse(reader io.Reader, saveDir string) error {
if err != nil { if err != nil {
return fmt.Errorf("failed to read response body: %v", err) return fmt.Errorf("failed to read response body: %v", err)
} }
log.Printf("Received file list: %v", string(body))
var fileList FileList var fileList FileList
if err := json.Unmarshal(body, &fileList); err != nil { if err := json.Unmarshal(body, &fileList); err != nil {
return fmt.Errorf("failed to unmarshal file list: %v", err) return fmt.Errorf("failed to unmarshal file list: %v", err)
} }
log.Printf("Received file list: %v", fileList.Files)
for _, filePath := range fileList.Files { for _, filePath := range fileList.Files {
err := saveFileOrFolder(filePath, saveDir) err := saveFileOrFolder(filePath, saveDir)
if err != nil { if err != nil {

67
godo/localchat/getfiles.go

@ -28,25 +28,56 @@ func HandleGetFiles(w http.ResponseWriter, r *http.Request) {
} }
log.Printf("Received file list: %v", fileList) log.Printf("Received file list: %v", fileList)
defer r.Body.Close() defer r.Body.Close()
baseDir, err := libs.GetOsDir() baseDir, err := libs.GetOsDir()
if err != nil { if err != nil {
log.Printf("Failed to get OS directory: %v", err) log.Printf("Failed to get OS directory: %v", err)
return return
} }
// 用于存储文件列表
var files []string
for _, filePath := range fileList.Files { for _, filePath := range fileList.Files {
fp := filepath.Join(baseDir, filePath) fp := filepath.Join(baseDir, filePath)
err := ServeFile(w, r, fp) if err := serveDirectory(w, r, fp, &files); err != nil {
if err != nil { http.Error(w, fmt.Sprintf("Failed to serve directory: %v", err), http.StatusInternalServerError)
http.Error(w, fmt.Sprintf("Failed to serve file: %v", err), http.StatusInternalServerError)
return return
} }
} }
fmt.Fprintf(w, "Files served successfully") // 将文件列表编码为 JSON 并返回
jsonData, err := json.Marshal(files)
if err != nil {
http.Error(w, "Failed to marshal file list", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "application/json")
w.Write(jsonData)
} }
func ServeFile(w http.ResponseWriter, r *http.Request, filePath string) error { func serveDirectory(w http.ResponseWriter, r *http.Request, dirPath string, files *[]string) error {
filesInDir, err := os.ReadDir(dirPath)
if err != nil {
return fmt.Errorf("failed to read directory: %v", err)
}
for _, f := range filesInDir {
filePath := filepath.Join(dirPath, f.Name())
if f.IsDir() {
if err := serveDirectory(w, r, filePath, files); err != nil {
return err
}
} else {
*files = append(*files, filePath)
}
}
return nil
}
func ServeFile(w http.ResponseWriter, r *http.Request, filePath string) error {
file, err := os.Open(filePath) file, err := os.Open(filePath)
if err != nil { if err != nil {
return fmt.Errorf("failed to open file: %v", err) return fmt.Errorf("failed to open file: %v", err)
@ -59,33 +90,9 @@ func ServeFile(w http.ResponseWriter, r *http.Request, filePath string) error {
} }
if fileInfo.IsDir() { if fileInfo.IsDir() {
return serveDirectory(w, r, filePath) return serveDirectory(w, r, filePath, nil)
} }
http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), file) http.ServeContent(w, r, fileInfo.Name(), fileInfo.ModTime(), file)
return nil return nil
} }
func serveDirectory(w http.ResponseWriter, r *http.Request, dirPath string) error {
files, err := os.ReadDir(dirPath)
if err != nil {
return fmt.Errorf("failed to read directory: %v", err)
}
for _, f := range files {
filePath := filepath.Join(dirPath, f.Name())
if f.IsDir() {
err := serveDirectory(w, r, filePath)
if err != nil {
return err
}
} else {
err := ServeFile(w, r, filePath)
if err != nil {
return err
}
}
}
return nil
}

Loading…
Cancel
Save