尝试为服务器中的(文件上传和下载)错误编写一个示例。虽然它在前端下载文件,但在服务器中出现错误。
对于路由——
WebServer.builder(getRouting()).port(8080).build().start();
private static Routing getRouting() throws Exception{
return Routing.builder().register("/filetest", JerseySupport.builder().register(FileController.class).build())
.build();
}
@RequestScoped
public class FileController {
@Context
ServerRequest req;
@Context
ServerResponse res;
@GET
@Path("/{fname}")
public void download(@PathParam("fname") String fname) {
try {
//Getting the file
java.nio.file.Path filepath = Paths.get("c:/"+fname+".txt");
ResponseHeaders headers = res.headers();
headers.contentType(io.helidon.common.http.MediaType.APPLICATION_OCTET_STREAM);
headers.put(Http.Header.CONTENT_DISPOSITION, ContentDisposition.builder()
.filename(filepath.getFileName().toString())
.build()
.toString());
res.send(filepath);
}catch(Exception e) {
}
}
2021 年 7 月 29 日下午 6:20:36 io.helidon.webserver.RequestRouting$RoutedRequest defaultHandler 警告:默认错误处理程序:遇到未处理的异常。java.util.concurrent.ExecutionException:遇到此异常的未处理“原因”。在 io.helidon.webserver.RequestRouting$RoutedRequest.defaultHandler(RequestRouting.java:397) 在 io.helidon.webserver.RequestRouting$RoutedRequest.nextNoCheck(RequestRouting.java:377) 在 io.helidon.webserver.RequestRouting$RoutedRequest.next (RequestRouting.java:420) 在 io.helidon.webserver.jersey.ResponseWriter.failure(ResponseWriter.java:133) 在 org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:438) 在 org. glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:263) 在 org.glassfish.jersey.internal.Errors$1.call(Errors.java:248) 在 org.glassfish.jersey。1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java:834) 引起:io.helidon .common.http.AlreadyCompletedException:响应状态代码和标头已经完成(发送到客户端)!在 io.helidon.webserver.HashResponseHeaders$CompletionSupport.runIfNotCompleted(HashResponseHeaders.java:384) 在 io.helidon.webserver.HashResponseHeaders.httpStatus(HashResponseHeaders.java:251) 在 io.helidon.webserver.Response.status(Response.java :122) 在 io.helidon.webserver.Response.status(Response.java:48) 在 io.helidon.webserver.jersey.ResponseWriter.writeResponseStatusAndHeaders(ResponseWriter.java:81) 在 org.glassfish.jersey.server.ServerRuntime$ Responder.writeResponse(ServerRuntime.java:607) 在 org.glassfish.jersey.server.ServerRuntime$Responder。
2021 年 7 月 29 日下午 6:20:36 io.helidon.webserver.RequestRouting$RoutedRequest defaultHandler 警告:无法对 throwable 执行错误处理(请参阅此异常的原因),因为标头已发送 java.lang.IllegalStateException:标头已发送. 无法处理此异常的原因。在 io.helidon.webserver.RequestRouting$RoutedRequest.defaultHandler(RequestRouting.java:405) 在 io.helidon.webserver.RequestRouting$RoutedRequest.nextNoCheck(RequestRouting.java:377) 在 io.helidon.webserver.RequestRouting$RoutedRequest.next (RequestRouting.java:420) 在 io.helidon.webserver.jersey.ResponseWriter.failure(ResponseWriter.java:133) 在 org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:438) 在 org. glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:263) 在 org.glassfish.jersey.internal.Errors$1。ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) 在 java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) 在 java.base/java.lang.Thread.run(Thread.java: 834)原因:io.helidon.common.http.AlreadyCompletedException:响应状态代码和标头已经完成(发送到客户端)!在 io.helidon.webserver.HashResponseHeaders$CompletionSupport.runIfNotCompleted(HashResponseHeaders.java:384) 在 io.helidon.webserver.HashResponseHeaders.httpStatus(HashResponseHeaders.java:251) 在 io.helidon.webserver.Response.status(Response.java :122) 在 io.helidon.webserver.Response.status(Response.java:48) 在 io.helidon.webserver.jersey.ResponseWriter.writeResponseStatusAndHeaders(ResponseWriter.java:81) 在 org.glassfish.jersey.server.ServerRuntime$ Responder.writeResponse(ServerRuntime.java:607) 在 org.