fix: 修复了当文件名为index.html时被golang贴心自动重定向的bug

This commit is contained in:
539943419 committed 2024-08-23 19:42:35 +08:00
1 parent 817603cade
commit 871906808c
1 file changed
+62 -50
+62 -50
View File
@@ -1,59 +1,71 @@
package api
import (
"github.com/gin-gonic/gin"
"net/http"
"os"
"path/filepath"
"io/ioutil"
"io/ioutil"
"net/http"
"os"
"path/filepath"
"strings"
"time"
"github.com/gin-gonic/gin"
)
func GetHandler(c *gin.Context) {
decodedPath, err := filepath.Abs(filepath.Join(staticPath, c.Param("path")))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to access path"})
return
}
decodedPath, err := filepath.Abs(filepath.Join(staticPath, c.Param("path")))
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to access path"})
return
}
fileInfo, err := os.Stat(decodedPath)
if os.IsNotExist(err) {
c.JSON(http.StatusNotFound, gin.H{"error": "Path not found"})
return
}
fileInfo, err := os.Stat(decodedPath)
if os.IsNotExist(err) {
c.JSON(http.StatusNotFound, gin.H{"error": "Path not found"})
return
}
if fileInfo.IsDir() {
files, err := ioutil.ReadDir(decodedPath)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to scan directory"})
return
}
if fileInfo.IsDir() {
files, err := ioutil.ReadDir(decodedPath)
if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to scan directory"})
return
}
var fileDetails []gin.H
for _, file := range files {
fileDetails = append(fileDetails, gin.H{
"name": file.Name(),
"size": file.Size(),
"type": func() string {
if file.IsDir() {
return "directory"
}
return "file"
}(),
"stats": gin.H{
"atimeMs": file.ModTime().UnixNano() / 1e6,
"birthtimeMs": file.ModTime().UnixNano() / 1e6,
"ctimeMs": file.ModTime().UnixNano() / 1e6,
"mtimeMs": file.ModTime().UnixNano() / 1e6,
},
})
}
if len(fileDetails) == 0 {
c.JSON(http.StatusOK, []gin.H{})
} else {
c.JSON(http.StatusOK, fileDetails)
}
} else {
c.File(decodedPath)
}
}
var fileDetails []gin.H
for _, file := range files {
fileDetails = append(fileDetails, gin.H{
"name": file.Name(),
"size": file.Size(),
"type": func() string {
if file.IsDir() {
return "directory"
}
return "file"
}(),
"stats": gin.H{
"atimeMs": file.ModTime().UnixNano() / 1e6,
"birthtimeMs": file.ModTime().UnixNano() / 1e6,
"ctimeMs": file.ModTime().UnixNano() / 1e6,
"mtimeMs": file.ModTime().UnixNano() / 1e6,
},
})
}
if len(fileDetails) == 0 {
c.JSON(http.StatusOK, []gin.H{})
} else {
c.JSON(http.StatusOK, fileDetails)
}
} else {
if strings.HasSuffix(decodedPath, "index.html") {
f, err := os.Open(decodedPath)
if err != nil {
c.Writer.WriteHeader(http.StatusInternalServerError)
c.Writer.Write([]byte("Internal Server Error"))
return
}
http.ServeContent(c.Writer, c.Request, "index.html", time.Now(), f)
} else {
c.File(decodedPath)
}
}
}