🤗 ApiHug × {Postman|Swagger|Api...} = 快↑ 准√ 省↓
- GitHub - apihug/apihug.com: All abou the Apihug
- apihug.com: 有爱,有温度,有质量,有信任
- 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; }]; }
接口定义
定义接口:
- consumes: "multipart/form-data"
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" } } } } } }
对于
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(); }
我们