专栏上一篇,写了如何使用 javax.ws.rs 上传文件,那么必然的,我们得再学习学习如何下载文件
这个就不赘述了,和上一篇,文件上传的 Maven 依赖一样。
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);
}
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);
}
}
}
感谢阅读~ 如有错误之处,请帮忙指正~