Return signed OSS URLs for site images
This commit is contained in:
@@ -146,7 +146,19 @@ func hydrateAftersalesOrder(order *models.AftersalesOrder) {
|
||||
if order == nil {
|
||||
return
|
||||
}
|
||||
order.SiteImages = parseSiteImages(order.SiteImagesJSON)
|
||||
order.SiteImages = siteImageAccessURLs(parseSiteImages(order.SiteImagesJSON))
|
||||
}
|
||||
|
||||
func siteImageAccessURLs(images []string) []string {
|
||||
if len(images) == 0 {
|
||||
return nil
|
||||
}
|
||||
ossService := NewOSSService()
|
||||
urls := make([]string, 0, len(images))
|
||||
for _, image := range images {
|
||||
urls = append(urls, ossService.AccessURL(image))
|
||||
}
|
||||
return urls
|
||||
}
|
||||
|
||||
// generateUniqueSerial 生成唯一的售后工单序列号
|
||||
@@ -385,7 +397,7 @@ func (s *AftersalesService) PublicQuery(serialNumber string) (*models.Aftersales
|
||||
ConfirmedAt: order.ConfirmedAt,
|
||||
Signature: order.Signature,
|
||||
ResponsibleSignature: order.ResponsibleSignature,
|
||||
SiteImages: parseSiteImages(order.SiteImagesJSON),
|
||||
SiteImages: siteImageAccessURLs(parseSiteImages(order.SiteImagesJSON)),
|
||||
}
|
||||
if order.Technician != nil {
|
||||
view.TechnicianName = order.Technician.Name
|
||||
@@ -393,7 +405,7 @@ func (s *AftersalesService) PublicQuery(serialNumber string) (*models.Aftersales
|
||||
return view, nil
|
||||
}
|
||||
|
||||
// UploadSiteImages 上传客户确认现场图片到 OSS 并保存 URL。
|
||||
// UploadSiteImages 上传客户确认现场图片到 OSS 并保存 object key。
|
||||
func (s *AftersalesService) UploadSiteImages(serialNumber string, files []*multipart.FileHeader) ([]string, error) {
|
||||
normalized := normalizeAftersalesSerial(serialNumber)
|
||||
if len(files) == 0 {
|
||||
@@ -425,7 +437,7 @@ func (s *AftersalesService) UploadSiteImages(serialNumber string, files []*multi
|
||||
}
|
||||
|
||||
ossService := NewOSSService()
|
||||
uploaded := make([]string, 0, len(files))
|
||||
uploadedKeys := make([]string, 0, len(files))
|
||||
for _, fh := range files {
|
||||
if fh.Size <= 0 {
|
||||
return nil, fmt.Errorf("图片 %s 内容为空", fh.Filename)
|
||||
@@ -445,21 +457,21 @@ func (s *AftersalesService) UploadSiteImages(serialNumber string, files []*multi
|
||||
}
|
||||
|
||||
objectKey := buildSiteImageObjectKey(cfg.Prefix, normalized, fh.Filename)
|
||||
url, err := ossService.UploadObject(objectKey, file, contentType)
|
||||
err = ossService.UploadObject(objectKey, file, contentType)
|
||||
_ = file.Close()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
uploaded = append(uploaded, url)
|
||||
uploadedKeys = append(uploadedKeys, objectKey)
|
||||
}
|
||||
|
||||
merged := append(existing, uploaded...)
|
||||
merged := append(existing, uploadedKeys...)
|
||||
order.SiteImagesJSON = encodeSiteImages(merged)
|
||||
if err := database.DB.Save(&order).Error; err != nil {
|
||||
return nil, fmt.Errorf("保存现场图片失败: %w", err)
|
||||
}
|
||||
|
||||
return merged, nil
|
||||
return siteImageAccessURLs(merged), nil
|
||||
}
|
||||
|
||||
func buildSiteImageObjectKey(prefix string, serialNumber string, filename string) string {
|
||||
|
||||
Reference in New Issue
Block a user