gitea源码

editor_uploader.go 1.5KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. // Copyright 2025 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package repo
  4. import (
  5. "net/http"
  6. repo_model "code.gitea.io/gitea/models/repo"
  7. "code.gitea.io/gitea/modules/setting"
  8. "code.gitea.io/gitea/modules/util"
  9. "code.gitea.io/gitea/services/context"
  10. "code.gitea.io/gitea/services/context/upload"
  11. files_service "code.gitea.io/gitea/services/repository/files"
  12. )
  13. // UploadFileToServer upload file to server file dir not git
  14. func UploadFileToServer(ctx *context.Context) {
  15. file, header, err := ctx.Req.FormFile("file")
  16. if err != nil {
  17. ctx.ServerError("FormFile", err)
  18. return
  19. }
  20. defer file.Close()
  21. buf := make([]byte, 1024)
  22. n, _ := util.ReadAtMost(file, buf)
  23. if n > 0 {
  24. buf = buf[:n]
  25. }
  26. err = upload.Verify(buf, header.Filename, setting.Repository.Upload.AllowedTypes)
  27. if err != nil {
  28. ctx.HTTPError(http.StatusBadRequest, err.Error())
  29. return
  30. }
  31. name := files_service.CleanGitTreePath(header.Filename)
  32. if len(name) == 0 {
  33. ctx.HTTPError(http.StatusBadRequest, "Upload file name is invalid")
  34. return
  35. }
  36. uploaded, err := repo_model.NewUpload(ctx, name, buf, file)
  37. if err != nil {
  38. ctx.ServerError("NewUpload", err)
  39. return
  40. }
  41. ctx.JSON(http.StatusOK, map[string]string{"uuid": uploaded.UUID})
  42. }
  43. // RemoveUploadFileFromServer remove file from server file dir
  44. func RemoveUploadFileFromServer(ctx *context.Context) {
  45. fileUUID := ctx.FormString("file")
  46. if err := repo_model.DeleteUploadByUUID(ctx, fileUUID); err != nil {
  47. ctx.ServerError("DeleteUploadByUUID", err)
  48. return
  49. }
  50. ctx.Status(http.StatusNoContent)
  51. }