mirror of
				https://github.com/usememos/memos.git
				synced 2025-06-05 22:09:59 +02:00 
			
		
		
		
	feat: upload resource by openid api (#55)
This commit is contained in:
		@@ -15,7 +15,7 @@ func (s *Server) registerResourceRoutes(g *echo.Group) {
 | 
			
		||||
	g.POST("/resource", func(c echo.Context) error {
 | 
			
		||||
		userID := c.Get(getUserIDContextKey()).(int)
 | 
			
		||||
 | 
			
		||||
		err := c.Request().ParseMultipartForm(5 << 20)
 | 
			
		||||
		err := c.Request().ParseMultipartForm(64 << 20)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusBadRequest, "Upload file overload max size").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ package server
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io/ioutil"
 | 
			
		||||
	"memos/api"
 | 
			
		||||
	"net/http"
 | 
			
		||||
	"strconv"
 | 
			
		||||
@@ -84,6 +85,64 @@ func (s *Server) registerWebhookRoutes(g *echo.Group) {
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	g.POST("/:openId/resource", func(c echo.Context) error {
 | 
			
		||||
		openID := c.Param("openId")
 | 
			
		||||
 | 
			
		||||
		userFind := &api.UserFind{
 | 
			
		||||
			OpenID: &openID,
 | 
			
		||||
		}
 | 
			
		||||
		user, err := s.UserService.FindUser(userFind)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusInternalServerError, "Failed to find user by open_id").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
		if user == nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("User openId not found: %s", openID))
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if err := c.Request().ParseMultipartForm(64 << 20); err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusBadRequest, "Upload file overload max size").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		file, err := c.FormFile("file")
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusBadRequest, "Upload file not found").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		filename := file.Filename
 | 
			
		||||
		filetype := file.Header.Get("Content-Type")
 | 
			
		||||
		size := file.Size
 | 
			
		||||
		src, err := file.Open()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusInternalServerError, "Failed to open file").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
		defer src.Close()
 | 
			
		||||
 | 
			
		||||
		fileBytes, err := ioutil.ReadAll(src)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusInternalServerError, "Failed to read file").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		resourceCreate := &api.ResourceCreate{
 | 
			
		||||
			Filename:  filename,
 | 
			
		||||
			Type:      filetype,
 | 
			
		||||
			Size:      size,
 | 
			
		||||
			Blob:      fileBytes,
 | 
			
		||||
			CreatorID: user.ID,
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		resource, err := s.ResourceService.CreateResource(resourceCreate)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusInternalServerError, "Failed to create resource").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8)
 | 
			
		||||
		if err := json.NewEncoder(c.Response().Writer).Encode(composeResponse(resource)); err != nil {
 | 
			
		||||
			return echo.NewHTTPError(http.StatusInternalServerError, "Failed to encode resource response").SetInternal(err)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		return nil
 | 
			
		||||
	})
 | 
			
		||||
 | 
			
		||||
	g.GET("/r/:resourceId/:filename", func(c echo.Context) error {
 | 
			
		||||
		resourceID, err := strconv.Atoi(c.Param("resourceId"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -9,14 +9,12 @@ class ResourceService {
 | 
			
		||||
  public async upload(file: File) {
 | 
			
		||||
    const { name: filename, size } = file;
 | 
			
		||||
 | 
			
		||||
    if (size > 5 << 20) {
 | 
			
		||||
      return Promise.reject("overload max size: 5Mb");
 | 
			
		||||
    if (size > 64 << 20) {
 | 
			
		||||
      return Promise.reject("overload max size: 8MB");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    const formData = new FormData();
 | 
			
		||||
 | 
			
		||||
    formData.append("file", file, filename);
 | 
			
		||||
 | 
			
		||||
    const data = await api.uploadFile(formData);
 | 
			
		||||
 | 
			
		||||
    return data;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user