如何支持文件上传-ApiHug小技巧-001

  🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓ 

  1. GitHub - apihug/apihug.com: All abou the Apihug   
  2. apihug.com: 有爱,有温度,有质量,有信任
  3. ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace

    概括

    Spring框架提供了强大的文件上传功能。通过Spring的文件上传功能,您可以轻松地处理HTTP请求中的文件上传操作。您可以使用MultipartFile接口来表示上传的文件,它提供了访问文件内容和元数据的方法。

    一个MultipartFile类型的参数,Spring将自动将上传的文件绑定到该参数上。

    在处理文件上传时,您可以使用MultipartFile接口的方法来获取文件名、文件大小、内容类型等信息。您还可以使用transferTo()方法将文件保存到本地磁盘或其他存储位置。

    通过Spring的文件上传功能,您可以轻松地接收、验证和处理用户上传的文件。您可以根据业务需求执行各种操作,例如保存文件到数据库、生成缩略图、限制文件大小等。

    总而言之,Spring的文件上传功能简化了文件上传的处理过程,为您提供了更高层次的抽象,使您能够更轻松地处理文件上传操作。

    ApiHug

    ApiHug 当然必须只是文件上传,表达也很简单直观。 

    三步骤定义文件上传支持接口

    Proto Request

    定义属性为 bytes 类型:

    message UploadBookCoverToLocalRequest {
    
      option (hope.swagger.schema) = {
        json_schema: {
          description: "upload a cover of book to the local file system";
        };
      };
    
      int64 id = 1 [(hope.swagger.field) = {
        description: "id of this book";
        empty: FALSE;
      }];
    
      bytes file = 2 [(hope.swagger.field) = {
        description: "file of this book must be a image(jpg|png) etc";
        empty: FALSE;
      }];
    }

    接口定义

    定义接口:

    1. consumes: "multipart/form-data"
    2. post 必须
    rpc UploadBookCoverToLocal (com.novel.book.proto.api.admin.request.UploadBookCoverToLocalRequest) returns (google.protobuf.Empty) {
        option (hope.swagger.operation) = {
          post: "/upload-book-cover";
          description: "Upload a book cover to local file system";
          priority: LOW;
          consumes: "multipart/form-data";
          authorization:{
            rbac:{
              predefined_role_checker: PLATFORM
            }
          }
        };
      }

    Wire 获得接口定义

      "/admin/book/upload-book-cover" : {
          "post" : {
            "tags" : [ ],
            "summary" : "",
            "description" : "Upload a book cover to local file system",
            "operationId" : "AdminBookService#UploadBookCoverToLocal",
            "parameters" : [ ],
            "requestBody" : {
              "content" : {
                "multipart/form-data" : {
                  "schema" : {
                    "type" : "object",
                    "$ref" : "#/components/schemas/UploadBookCoverToLocalRequest"
                  }
                }
              }
            }
          }
        }

    post file

    对于 Multipart 类型对象, 在 Wire 端仅生成一个 Generic 对象:

    public class UploadBookCoverToLocalRequest<Multipart> {
      @hope.common.service.annotation.Multipart
      @NotNull
      @Schema(
          description = "file of this book must be a image(jpg|png) etc",
          requiredMode = Schema.RequiredMode.REQUIRED
      )
      protected Multipart file;
    }

    具体实现, 在 stub, application 端生成。

    Stub 获得接口实现

    生成对应实现 Multipart 对象:

    import javax.annotation.Generated;
    import org.springframework.web.multipart.MultipartFile;
    
    @Generated("H.O.P.E. Infra Team")
    public class UploadBookCoverToLocalRequestMultipart extends UploadBookCoverToLocalRequest<MultipartFile> {
    }

    接下来就和普通的操作文件接口一样去操作上传文件啦!

    /**
       *
       * Authorization:
       *
       * <ul>
       * 	<li>PredefinedRoleCheckerType: PLATFORM</li>
       * </ul>
       * @apiNote
       * 	<p>{@code /admin/book/upload-book-cover}
       * 	<p>{@code Upload a book cover to local file system}
       */
      default void uploadBookCoverToLocal(SimpleResultBuilder<String> builder,
          UploadBookCoverToLocalRequestMultipart uploadBookCoverToLocalRequestMultipart) {
        builder.notImplemented();
      }

    我们

    api-hug-contact

  • 47
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值