wangchuanjin преди 2 месеца
родител
ревизия
f6b8b1b415
променени са 3 файла, в които са добавени 22 реда и са изтрити 14 реда
  1. 5 1
      oss/http.go
  2. 16 12
      oss/oss.go
  3. 1 1
      oss/rpc.go

+ 5 - 1
oss/http.go

@@ -70,12 +70,16 @@ func DownloadHandler(w http.ResponseWriter, r *http.Request) {
 		return
 	}
 	log.Println(GetIp(r), "restful方式下载文件", bucketID, objectName)
-	data, err := DownloadAttachment(bucketID, objectName)
+	data, headers, err := DownloadAttachment(bucketID, objectName)
 	if err != nil {
 		log.Println(constant.DownloadFail, err)
 		http.Error(w, fmt.Sprintf(constant.DownloadFail, err), http.StatusInternalServerError)
 		return
 	}
+	if headers.Get("Content-Type") != "text/plain" {
+		w.Header().Set("Content-Type", headers.Get("Content-Type")) // 根据文件类型调整此行
+		w.Header().Set("Content-Disposition", "attachment; filename="+objectName)
+	}
 	w.Write(data)
 }
 

+ 16 - 12
oss/oss.go

@@ -9,6 +9,7 @@ import (
 	"io"
 	"io/ioutil"
 	"log"
+	"net/http"
 	"sync"
 
 	"app.yhyue.com/moapp/jybase/es"
@@ -104,32 +105,35 @@ func UploadAttachment(bucketID, objectName string, data io.Reader, gzipEnabled b
 }
 
 // DownloadAttachment 下载附件,如果检测到数据为gzip压缩,则自动解压后返回
-func DownloadAttachment(bucketID, objectName string) ([]byte, error) {
+func DownloadAttachment(bucketID, objectName string) ([]byte, http.Header, error) {
 	bucket, err := GetCachedBucket(bucketID)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
 
-	body, err := bucket.GetObject(objectName)
+	result, err := bucket.DoGetObject(&ossSDK.GetObjectRequest{objectName}, nil)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
-	defer body.Close()
-
-	data, err := ioutil.ReadAll(body)
+	defer result.Response.Body.Close()
+	data, err := ioutil.ReadAll(result.Response.Body)
 	if err != nil {
-		return nil, err
+		return nil, nil, err
 	}
 	// 判断是否为gzip压缩格式(判断前两个字节)
 	if len(data) >= 2 && data[0] == 0x1f && data[1] == 0x8b {
 		gzipReader, err := gzip.NewReader(bytes.NewReader(data))
 		if err != nil {
-			return nil, err
+			return nil, nil, err
 		}
 		defer gzipReader.Close()
-		return ioutil.ReadAll(gzipReader)
+		data, err = ioutil.ReadAll(gzipReader)
+		if err != nil {
+			return nil, nil, err
+		}
+		return data, result.Response.Headers, nil
 	}
-	return data, nil
+	return data, result.Response.Headers, nil
 }
 
 // DeleteAttachment 删除附件
@@ -155,7 +159,7 @@ func LoadOSSAccounts() {
 
 // 获取标讯正文,优先从oss中取,再从es中取
 func GetBidDetail(bucketID, objectName string) []byte {
-	b, e := DownloadAttachment(bucketID, objectName)
+	b, _, e := DownloadAttachment(bucketID, objectName)
 	if e == nil && b != nil && len(b) > 0 {
 		return b
 	}

+ 1 - 1
oss/rpc.go

@@ -60,7 +60,7 @@ func (s *OSSService) Download(args *entity.Args, reply *api.Result) error {
 		return err
 	}
 	log.Println("rpc方式下载文件", args.BucketID, args.ObjectName)
-	data, err := DownloadAttachment(args.BucketID, args.ObjectName)
+	data, _, err := DownloadAttachment(args.BucketID, args.ObjectName)
 	if err != nil {
 		log.Println(constant.DownloadFail, err)
 		return err