前提
- 后端服务使用Jboss restEasy搭建rest服务
- 业务需求需要使用文件上传功能
- 文件上传格式为浏览器表单上传文件
实现步骤
1.添加依赖
reasteasy解析表单文件需要添加扩展依赖,以maven项目为例,依赖如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16<dependencies>
<!--resteasy 基础依赖-->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>3.1.0.Final</version>
</dependency>
<!--reasteasy multipart 表单扩展依赖-->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-multipart-provider</artifactId>
<version>3.0.0.Final</version>
</dependency>
</dependencies>
2.编写接口
resteasy解析表单数据需要使用org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput接口,下面代码示例说明接口编写方式1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55/**
* 获取解析上传的文件
*
* @param multipartFormDataInput
* @return
* @throws Exception
*/
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)//接收数据类型为MULTIPART_FORM_DATA
@Produces(MediaType.APPLICATION_JSON)
public Boolean uploadStockAnalyseScriptFile(MultipartFormDataInput multipartFormDataInput)
throws Exception {
//获取表单中的数据map
Map<String, List<InputPart>> dataMaps = multipartFormDataInput.getFormDataMap();
//根据表单元素名称获取表单元素(需要同前端同学沟通好表单元素的name)
List<InputPart> fileParts = dataMaps.get("file");//表单元素-文件
//解析获取表单文件的输入流
InputStream inputStream;
try {
if (fileParts == null || fileParts.isEmpty())
throw new Exception("请求参数为空!");
InputPart filePart = fileParts.get(0);
inputStream = filePart.getBody(InputStream.class, null);
} catch (Exception e) {
throw new Exception(e.getMessage());
}
//保存文件至本地
String filePathName = "C:\\Users\\Johnson\\Desktop\\newFile.txt";
File target = new File(filePathName);
FileOutputStream fos = null;
try {
if (!target.getParentFile().exists())
target.getParentFile().mkdirs();
fos = new FileOutputStream(target);
byte[] b = new byte[1024];
int readLength;
while ((readLength = inputStream.read(b)) != -1) {
fos.write(b, 0, readLength);
}
} catch (Exception e) {
throw new AssistanceException(e.getMessage());
} finally {
if (inputStream != null)
inputStream.close();
if (fos != null)
fos.close();
}
return true;
}
另外,解析表单文件元素文件名,解析表单元素获取字串的方式如下
1 | import org.jboss.resteasy.plugins.providers.multipart.InputPart; |
这两个方法可以当做工具方法来使用