如何将多个 json 文件和表单数据上传到 rest 服务
How to upload multiple json files and form data to rest service
我想上传多个 JSON 文件(如学生成绩 JSON、学生课程安排 JSON、学生作业 JSON 等)和元数据(如学生信息)
在 Jersy 和 tomcat
休息 运行
这里采取的方法是什么?它应该像一个控制器吗?是否可以指定上传的 JSOn 结构?
如果其中一个文件丢失怎么办?
@Path("/submitStudentInformation")
public class SubmitStudInfoController {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/plain")
@Path("/multipleFiles")
public Response uploadFiles(@Context HttpServletRequest request) {
发送静态文件列表api
@POST
@Path("/uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(@FormDataParam("files") List<FormDataBodyPart> files)
if(files!=null) {
for (int i = 0; i < files.size(); i++) {
FormDataBodyPart this_formDataBodyPartFile = files.get(i);
ContentDisposition this_contentDispositionHeader = this_formDataBodyPartFile.getContentDisposition();
InputStream this_fileInputStream = this_formDataBodyPartFile.getValueAs(InputStream.class);
FormDataContentDisposition fileDetail = (FormDataContentDisposition) this_contentDispositionHeader;
String imagename = fileDetail.getFileName();
}
}
我正在使用前端 angularjs 所以我在 formdata
中设置了多个文件
var formdata = new FormData();
$scope.getTheFiles = function(element) {
$scope.$apply(function($scope) {
$scope.files = element.files;
for (var i = 0; i < element.files.length; i++) {
formdata.append('files', element.files[i]);
}
});
};
首先,您应该自己定义 entities
或 technically/simple 所说的(但不完全是)tables
来存储您的数据。
我假设它会是这样的:
- 学生 - table 存储学生
- 成绩 - 此处为学生成绩
- 课程-此处将保留课程时间表
接下来,REST 的想法是记录是单独管理的 (updated/inserted/deleted)。数据在特定记录的内容正文中作为原始 JSON 传递。但是,您也可以批量处理多个记录。例如,如果在插入(POST 方法)时你传递了一个 JSON 数组,而不是一个对象,这意味着你发送了多条记录,那么你在后端进行了多次插入:插入一个学生将需要一些东西像:{"name": "John"}
,但是插入多个学生会是这样的:[{"name": "John"}, {"name": "Davy"}]
通常,在 REST 中您不必上传 JSON 文件本身,您 将数据作为 JSON 传递给服务。如果您真的需要将 JSON 中的数据作为文件上传,请三思。然而,这在技术上是可行的。在文件上传的情况下,您需要以表单编码的方式传递数据,而不是原始的,作为经典的 REST 方法。
稍后为每个实体定义一个 URI,例如对于学生来说,它将类似于 /api/students/[id/]
具有基于 HTTP 方法的 REST 样式功能:
- GET - 列出整个记录集或单个记录集 (/students/5/)
- POST - 从 body
中插入一条带有 JSON 的新记录
- PUT - 更新特定记录,通常带有id,如(/students/5/)
- DELETE - 从记录集中删除一条记录,通常带有id,如(/students/5/)
GET 可以通过过滤功能、分页等进行改进...当然,您应该关心安全性、数据 access/manage 控制层。
对于像edit/delete这样的针对单条记录的操作,记录标识符可以在URI部分或作为参数或在内容主体中传递。你来决定。
我想上传多个 JSON 文件(如学生成绩 JSON、学生课程安排 JSON、学生作业 JSON 等)和元数据(如学生信息)
在 Jersy 和 tomcat
这里采取的方法是什么?它应该像一个控制器吗?是否可以指定上传的 JSOn 结构? 如果其中一个文件丢失怎么办?
@Path("/submitStudentInformation")
public class SubmitStudInfoController {
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/plain")
@Path("/multipleFiles")
public Response uploadFiles(@Context HttpServletRequest request) {
发送静态文件列表api
@POST
@Path("/uploadFile")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces(MediaType.APPLICATION_JSON)
public Response uploadFile(@FormDataParam("files") List<FormDataBodyPart> files)
if(files!=null) {
for (int i = 0; i < files.size(); i++) {
FormDataBodyPart this_formDataBodyPartFile = files.get(i);
ContentDisposition this_contentDispositionHeader = this_formDataBodyPartFile.getContentDisposition();
InputStream this_fileInputStream = this_formDataBodyPartFile.getValueAs(InputStream.class);
FormDataContentDisposition fileDetail = (FormDataContentDisposition) this_contentDispositionHeader;
String imagename = fileDetail.getFileName();
}
}
我正在使用前端 angularjs 所以我在 formdata
中设置了多个文件var formdata = new FormData();
$scope.getTheFiles = function(element) {
$scope.$apply(function($scope) {
$scope.files = element.files;
for (var i = 0; i < element.files.length; i++) {
formdata.append('files', element.files[i]);
}
});
};
首先,您应该自己定义 entities
或 technically/simple 所说的(但不完全是)tables
来存储您的数据。
我假设它会是这样的:
- 学生 - table 存储学生
- 成绩 - 此处为学生成绩
- 课程-此处将保留课程时间表
接下来,REST 的想法是记录是单独管理的 (updated/inserted/deleted)。数据在特定记录的内容正文中作为原始 JSON 传递。但是,您也可以批量处理多个记录。例如,如果在插入(POST 方法)时你传递了一个 JSON 数组,而不是一个对象,这意味着你发送了多条记录,那么你在后端进行了多次插入:插入一个学生将需要一些东西像:{"name": "John"}
,但是插入多个学生会是这样的:[{"name": "John"}, {"name": "Davy"}]
通常,在 REST 中您不必上传 JSON 文件本身,您 将数据作为 JSON 传递给服务。如果您真的需要将 JSON 中的数据作为文件上传,请三思。然而,这在技术上是可行的。在文件上传的情况下,您需要以表单编码的方式传递数据,而不是原始的,作为经典的 REST 方法。
稍后为每个实体定义一个 URI,例如对于学生来说,它将类似于 /api/students/[id/]
具有基于 HTTP 方法的 REST 样式功能:
- GET - 列出整个记录集或单个记录集 (/students/5/)
- POST - 从 body 中插入一条带有 JSON 的新记录
- PUT - 更新特定记录,通常带有id,如(/students/5/)
- DELETE - 从记录集中删除一条记录,通常带有id,如(/students/5/)
GET 可以通过过滤功能、分页等进行改进...当然,您应该关心安全性、数据 access/manage 控制层。
对于像edit/delete这样的针对单条记录的操作,记录标识符可以在URI部分或作为参数或在内容主体中传递。你来决定。