使用go编写一个可以支持手机和电脑互相共享文件的程序
2024-01-13/2024-01-13
fogsun
编写一个可以支持手机和电脑互相共享文件的程序是一个复杂的项目,需要涉及很多方面,如网络编程、操作系统的文件管理、跨平台兼容性等。以下是一个简化的示例,该示例使用Go编写了一个基本的HTTP服务器,电脑和手机可以通过在同一局域网中访问这个服务器来上传和下载文件。
package main
import (
"fmt"
"io"
"net/http"
"os"
)
const uploadPath = "./uploads"
func main() {
http.HandleFunc("/upload", uploadFileHandler)
http.HandleFunc("/files/", serveFilesHandler)
fmt.Println("Server started on :8080")
http.ListenAndServe(":8080", nil)
}
// 处理文件上传
func uploadFileHandler(w http.ResponseWriter, r *http.Request) {
if r.Method == "POST" {
// 限制上传文件的大小(例如:10MB)
r.ParseMultipartForm(10 << 20)
file, handler, err := r.FormFile("file")
if err != nil {
fmt.Println("Error Retrieving the File")
fmt.Println(err)
return
}
defer file.Close()
fmt.Printf("Uploaded File: %+v\n", handler.Filename)
fmt.Printf("File Size: %+v\n", handler.Size)
fmt.Printf("MIME Header: %+v\n", handler.Header)
// 创建文件
dst, err := os.Create(fmt.Sprintf("%s/%s", uploadPath, handler.Filename))
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
defer dst.Close()
// 将上传的文件复制到目标文件
if _, err := io.Copy(dst, file); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
fmt.Fprintf(w, "Successfully Uploaded File\n")
} else {
fmt.Fprintf(w, "Invalid request method.")
}
}
// 处理文件下载和展示
func serveFilesHandler(w http.ResponseWriter, r *http.Request) {
http.StripPrefix("/files/", http.FileServer(http.Dir(uploadPath))).ServeHTTP(w, r)
}
在 uploadPath
目录下存储上传的文件,这个目录需要在运行程序之前创建。上传文件处理函数 uploadFileHandler
负责接收并保存上传的文件。而 serveFilesHandler
函数则使用 http.FileServer
提供已上传文件的静态服务,允许用户下载或查看这些文件。
要运行这个服务,用户可以在手机或电脑上打开浏览器,输入电脑的IP地址加上端口(例如 http://192.168.1.2:8080
),然后就可以上传或下载文件了。
请注意,这个简单的例子没有考虑安全性(如身份验证、加密等),在真实的应用场景中需要添加更多的安全特性来保护用户的数据。而且,对于大型的文件传输,你可能需要考虑更高效的文件传输协议,比如FTP或SFTP。而且,在手机上进行文件上传下载通常会需要一个对移动设备友好的前端界面,以提供更好的用户体验。