驗證身份
This commit is contained in:
@@ -39,69 +39,72 @@ func ImagesGet(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func ImagesPost(w http.ResponseWriter, r *http.Request) {
|
func ImagesPost(w http.ResponseWriter, r *http.Request) {
|
||||||
// 接收上傳的圖片文件, 僅限一張
|
models.AccountRead(w, r, func(account *models.Account) {
|
||||||
file, file_header, err := r.FormFile("file")
|
// 接收上傳的圖片文件, 僅限一張
|
||||||
if err != nil {
|
file, file_header, err := r.FormFile("file")
|
||||||
log.Println(err)
|
if err != nil {
|
||||||
return
|
|
||||||
}
|
|
||||||
defer file.Close()
|
|
||||||
|
|
||||||
// 圖片寬高
|
|
||||||
imgData, format, err := image.Decode(file)
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(format, imgData.Bounds().Dx(), imgData.Bounds().Dy())
|
|
||||||
|
|
||||||
// 將文件指針移回開頭
|
|
||||||
if _, err := file.Seek(0, 0); err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 读取文件内容
|
|
||||||
content, err := ioutil.ReadAll(file)
|
|
||||||
if err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// 整理文件信息
|
|
||||||
var img models.Image
|
|
||||||
img.Name = file_header.Filename
|
|
||||||
img.Size = int(file_header.Size) // 數據大小
|
|
||||||
img.Hash = fmt.Sprintf("%x", md5.Sum(content)) // 计算哈希
|
|
||||||
img.Type = file_header.Header.Get("Content-Type") // 文件類型
|
|
||||||
img.Path = fmt.Sprintf("data/images/%s.%s", img.Hash, format) // 存儲路徑
|
|
||||||
img.Width = imgData.Bounds().Dx()
|
|
||||||
img.Height = imgData.Bounds().Dy()
|
|
||||||
img.Format = format
|
|
||||||
|
|
||||||
// 先檢查 data/images 目錄是否存在
|
|
||||||
if _, err := ioutil.ReadDir("data/images"); err != nil {
|
|
||||||
if err := os.Mkdir("data/images", 0777); err != nil {
|
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
defer file.Close()
|
||||||
|
|
||||||
// 將文件存儲到本地 data/images 目錄下
|
// 圖片寬高
|
||||||
if err := ioutil.WriteFile(img.Path, content, 0666); err != nil {
|
imgData, format, err := image.Decode(file)
|
||||||
log.Println(err)
|
if err != nil {
|
||||||
return
|
log.Println(err)
|
||||||
}
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 存儲圖片信息到數據庫
|
fmt.Println(format, imgData.Bounds().Dx(), imgData.Bounds().Dy())
|
||||||
if err := configs.ORMDB().Create(&img).Error; err != nil {
|
|
||||||
log.Println(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
// 將文件指針移回開頭
|
||||||
w.Write(utils.ToJSON(img))
|
if _, err := file.Seek(0, 0); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 读取文件内容
|
||||||
|
content, err := ioutil.ReadAll(file)
|
||||||
|
if err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 整理文件信息
|
||||||
|
var img models.Image
|
||||||
|
img.Name = file_header.Filename
|
||||||
|
img.Size = int(file_header.Size) // 數據大小
|
||||||
|
img.Hash = fmt.Sprintf("%x", md5.Sum(content)) // 计算哈希
|
||||||
|
img.Type = file_header.Header.Get("Content-Type") // 文件類型
|
||||||
|
img.Path = fmt.Sprintf("data/images/%s.%s", img.Hash, format) // 存儲路徑
|
||||||
|
img.Width = imgData.Bounds().Dx() // 圖片寬度
|
||||||
|
img.Height = imgData.Bounds().Dy() // 圖片高度
|
||||||
|
img.Format = format // 圖片格式
|
||||||
|
img.UserID = account.ID // 用戶ID
|
||||||
|
|
||||||
|
// 先檢查 data/images 目錄是否存在
|
||||||
|
if _, err := ioutil.ReadDir("data/images"); err != nil {
|
||||||
|
if err := os.Mkdir("data/images", 0777); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 將文件存儲到本地 data/images 目錄下
|
||||||
|
if err := ioutil.WriteFile(img.Path, content, 0666); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 存儲圖片信息到數據庫
|
||||||
|
if err := configs.ORMDB().Create(&img).Error; err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
w.Header().Set("Content-Type", "application/json; charset=utf-8")
|
||||||
|
w.Write(utils.ToJSON(img))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func ImagesItemGet(w http.ResponseWriter, r *http.Request) {
|
func ImagesItemGet(w http.ResponseWriter, r *http.Request) {
|
||||||
|
Reference in New Issue
Block a user