文章目录
- 1 前言
- 2 Maven 依赖
- 3 下载接口
- 4 如何返回文件?
- 5 感谢
1 前言
专栏上一篇,写了如何使用 javax.ws.rs 上传文件,那么必然的,我们得再学习学习如何下载文件😀
2 Maven 依赖
这个就不赘述了,和上一篇,文件上传的 Maven 依赖一样。
3 下载接口
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;@Path("/test")
public interface TestController {@GET@Path("download")@Consumes(MediaType.APPLICATION_FORM_URLENCODED)Response download(@QueryParam("paramOne") String paramOne,@QueryParam("paramTwo") String paramTwo);
}
4 如何返回文件?
import org.springframework.util.Assert;
import javax.ws.rs.core.Response;public class TestService {public Response download(String paramOne, String paramTwo) {try {Assert.hasText(paramOne, "paramOne 不能为空");Assert.hasText(paramTwo, "paramTwo 不能为空");// 具体的业务逻辑, 产生了个文件File file = doSomethingThenGetAFile();String fileName = "text测试文件.txt";// URL 编码, 因为有中文this.urlEncodeFilename(fileName);return Response.ok().entity(file).header("Content-disposition", "attachment;filename*=utf-8''" + fileName).header("Content-Type", "text/plain").encoding("utf-8").build();} catch (Exception e) {logger.error("下载文件出现异常", e);return Response.ok().entity(JsonResult.fail(e.getMessage())).header("Content-Type", "application/json").encoding("utf-8").build();}}/*** 对 filename 进行 URL 编码** @param filename 文件名* @return 编码后的文件名*/public String urlEncodeFilename(String filename) {try {return URLEncoder.encode(filename, StandardCharsets.UTF_8.name());} catch (UnsupportedEncodingException e) {log.error("对文件名 {}, 进行 URL 编码时, 出现异常 {}", filename, e.getMessage());throw new RuntimeException("对文件名 " + filename + ", 进行 URL 编码时, 出现异常", e);}}
}
5 感谢
感谢阅读~ 如有错误之处,请帮忙指正~