mongo.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package global
  2. import (
  3. "context"
  4. "file_upload/backend/simple_zap"
  5. "fmt"
  6. "go.mongodb.org/mongo-driver/mongo"
  7. "go.mongodb.org/mongo-driver/mongo/gridfs"
  8. "go.mongodb.org/mongo-driver/mongo/options"
  9. "go.mongodb.org/mongo-driver/mongo/readpref"
  10. "io"
  11. )
  12. var MongoCon *mongo.Collection
  13. var MongoGridFS *gridfs.Bucket
  14. func SetupMongo() {
  15. clientOptions := options.Client().ApplyURI(MongoSetting.Url)
  16. connect, err := mongo.Connect(context.TODO(), clientOptions)
  17. if err != nil {
  18. simple_zap.WithCtx(context.Background()).Sugar().Warn(err, "mongo 出现异常")
  19. panic(err)
  20. }
  21. err = connect.Ping(context.TODO(), readpref.Primary())
  22. if err != nil {
  23. simple_zap.WithCtx(context.Background()).Sugar().Warn(err, "mongo 连接失败")
  24. panic(err)
  25. }
  26. database := connect.Database("bzd_file")
  27. MongoCon = database.Collection("file")
  28. MongoGridFS, err = gridfs.NewBucket(database)
  29. if err != nil {
  30. simple_zap.WithCtx(context.Background()).Sugar().Warn(err)
  31. panic(err)
  32. }
  33. }
  34. func UploadFileToGridFS(fileName string, fileData []byte) (string, error) {
  35. uploadStream, err := MongoGridFS.OpenUploadStream(fileName)
  36. if err != nil {
  37. return "", fmt.Errorf("无法打开上传流: %v", err)
  38. }
  39. defer uploadStream.Close()
  40. _, err = uploadStream.Write(fileData)
  41. if err != nil {
  42. return "", fmt.Errorf("写入文件数据时出错: %v", err)
  43. }
  44. return uploadStream.FileID.(string), nil
  45. }
  46. func DownloadFileFromGridFS(fileID string) ([]byte, error) {
  47. downloadStream, err := MongoGridFS.OpenDownloadStream(fileID)
  48. if err != nil {
  49. return nil, fmt.Errorf("无法打开下载流: %v", err)
  50. }
  51. defer downloadStream.Close()
  52. fileData, err := io.ReadAll(downloadStream)
  53. if err != nil {
  54. return nil, fmt.Errorf("读取文件数据时出错: %v", err)
  55. }
  56. return fileData, nil
  57. }