oss.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. // oss
  2. package spiderutil
  3. import (
  4. "bytes"
  5. "crypto/sha256"
  6. "fmt"
  7. "github.com/aliyun/aliyun-oss-go-sdk/oss"
  8. "io"
  9. "io/ioutil"
  10. cu "jygit.jydev.jianyu360.cn/data_capture/myself_util/commonutil"
  11. "log"
  12. "net/http"
  13. )
  14. var (
  15. ossclient *oss.Client
  16. //ha = sha256.New()
  17. ossEndpoint, ossAccessKeyId, ossAccessKeySecret, ossBucketName string
  18. )
  19. func OssInit(endpoint, accessKeyId, accessKeySecret, bucketName string) {
  20. ossEndpoint = endpoint
  21. ossAccessKeyId = accessKeyId
  22. ossAccessKeySecret = accessKeySecret
  23. ossBucketName = bucketName
  24. client, err := oss.New(ossEndpoint, ossAccessKeyId, ossAccessKeySecret)
  25. if err != nil {
  26. log.Fatal("Error:", err, ossEndpoint, ossAccessKeyId, ossAccessKeySecret)
  27. }
  28. ossclient = client
  29. }
  30. func OssGetObject(objectName string) []byte {
  31. cu.Catch()
  32. // 获取存储空间。
  33. bucket, err := ossclient.Bucket(ossBucketName)
  34. if err != nil {
  35. fmt.Println("Error:", err)
  36. return nil
  37. }
  38. // 下载文件到流。
  39. body, err := bucket.GetObject(objectName)
  40. if err != nil {
  41. fmt.Println("Error:", err)
  42. return nil
  43. }
  44. defer body.Close()
  45. data, err := ioutil.ReadAll(body)
  46. if err != nil {
  47. fmt.Println("Error:", err)
  48. return nil
  49. }
  50. return data
  51. }
  52. func OssPutObject(objectName string, fd io.Reader) (bool, error) {
  53. cu.Catch()
  54. // 获取存储空间。
  55. bucket, err := ossclient.Bucket(ossBucketName)
  56. if err != nil {
  57. log.Println("Error:", err)
  58. return false, err
  59. }
  60. // 上传文件流。
  61. err = bucket.PutObject(objectName, fd)
  62. if err != nil {
  63. log.Println("Error:", err)
  64. return false, err
  65. }
  66. return true, nil
  67. }
  68. func OssDeleteObject(objectName string) (bool, error) {
  69. // 获取存储空间。
  70. bucket, err := ossclient.Bucket(ossBucketName)
  71. if err != nil {
  72. log.Println("Error:", err)
  73. return false, err
  74. }
  75. err = bucket.DeleteObject(objectName)
  76. if err != nil {
  77. log.Println(err)
  78. return false, err
  79. }
  80. return true, nil
  81. }
  82. func demoDownFile(filename string, objectName string) {
  83. bs := OssGetObject(objectName)
  84. if bs != nil {
  85. ioutil.WriteFile(filename, bs, 0777)
  86. }
  87. }
  88. func GetHashKey(bs []byte) string {
  89. cu.Catch()
  90. ha := sha256.New()
  91. ha.Write(bs)
  92. hbs := ha.Sum(nil)
  93. key := fmt.Sprintf("%x", hbs)
  94. return key
  95. }
  96. func getbytes(resp *http.Response) []byte {
  97. cu.Catch()
  98. body, err := ioutil.ReadAll(resp.Body)
  99. if err != nil {
  100. log.Println(err)
  101. return []byte{}
  102. }
  103. return body
  104. }
  105. func getbytesBigFile(resp *http.Response) []byte {
  106. cu.Catch()
  107. buffer := bytes.NewBuffer(make([]byte, 0, 32*1024))
  108. _, err := io.Copy(buffer, resp.Body)
  109. if err != nil {
  110. log.Println(err)
  111. return []byte{}
  112. }
  113. temp := buffer.Bytes()
  114. length := len(temp)
  115. var body []byte
  116. //are we wasting more than 10% space?
  117. if cap(temp) > (length + length/10) {
  118. body = make([]byte, length)
  119. copy(body, temp)
  120. } else {
  121. body = temp
  122. }
  123. return body
  124. }
  125. func TypeByExt(path string) string {
  126. for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- {
  127. if path[i] == '.' {
  128. return path[i:]
  129. }
  130. }
  131. return ""
  132. }