File upload 使用SPARK Framework上载大文件时,chrome上的错误连接中止
我有下面的一段代码来处理Spark中的文件上传,它可以完美地处理低于极限的文件。现在,当我使用一个1GB的大文件时,在一些Jetty上,内部逻辑触发了中止浏览器连接而不提供响应错误代码。到目前为止,我在Chrome Developer工具的控制台中看到的是以下一行: POST网络::错误连接中止 以下是有关请求的一些详细信息:File upload 使用SPARK Framework上载大文件时,chrome上的错误连接中止,file-upload,jetty,embedded-jetty,spark-java,File Upload,Jetty,Embedded Jetty,Spark Java,我有下面的一段代码来处理Spark中的文件上传,它可以完美地处理低于极限的文件。现在,当我使用一个1GB的大文件时,在一些Jetty上,内部逻辑触发了中止浏览器连接而不提供响应错误代码。到目前为止,我在Chrome Developer工具的控制台中看到的是以下一行: POST网络::错误连接中止 以下是有关请求的一些详细信息: Request Headers Accept:application/json, text/javascript, */*; q=0.01 Content-Type:mu
Request Headers
Accept:application/json, text/javascript, */*; q=0.01
Content-Type:multipart/form-data; boundary=----WebKitFormBoundarybo8RwdTiWU9T9m3q
Origin:http://localhost:8888
Referer:http://localhost:8888/index.html
User-Agent:Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
X-Requested-With:XMLHttpRequest
Request Payload
------WebKitFormBoundarybo8RwdTiWU9T9m3q
Content-Disposition: form-data; name="files[]"; filename="some big file.mp4"
Content-Type: video/mp4
------WebKitFormBoundarybo8RwdTiWU9T9m3q--
下面是我使用的代码:
package examples.fileUploader;
import org.eclipse.jetty.util.URIUtil;
import spark.Spark;
import javax.servlet.MultipartConfigElement;
import javax.servlet.http.Part;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Collection;
public final class test
{
public static void main(final String... args)
{
Spark.port(8888);
Spark.staticFileLocation("/examples/fileUploader/public/");
Spark.staticFiles.externalLocation(URIUtil.addPaths(System.getProperty("user.dir"), "/src/main/java/examples/fileUploader/public"));
Spark.get("/hello", (request, response) -> "Hello World!");
Spark.post("/uploads", "multipart/form-data", (request, response) -> {
//- Servlet 3.x config
String location = URIUtil.addPaths(System.getProperty("user.dir"), "/tmp"); // the directory location where files will be stored
long maxFileSize = 100000000; // the maximum size allowed for uploaded files
long maxRequestSize = 100000000; // the maximum size allowed for multipart/form-data requests
int fileSizeThreshold = 1024; // the size threshold after which files will be written to disk
MultipartConfigElement multipartConfigElement = new MultipartConfigElement(location, maxFileSize, maxRequestSize, fileSizeThreshold);
request.raw().setAttribute("org.eclipse.jetty.multipartConfig", multipartConfigElement);
//-/
Collection<Part> parts = request.raw().getParts();
for(Part part : parts) {
System.out.println("Name:");
System.out.println(part.getName());
System.out.println("Size: ");
System.out.println(part.getSize());
System.out.println("Filename:");
System.out.println(part.getSubmittedFileName());
}
String fName = request.raw().getPart("upfile").getSubmittedFileName();
System.out.println("Title: "+request.raw().getParameter("title"));
System.out.println("File: "+fName);
Part uploadedFile = request.raw().getPart("upfile");
Path out = Paths.get("/aaa/bbb/"+fName);
try (final InputStream in = uploadedFile.getInputStream()) {
Files.copy(in, out);
uploadedFile.delete();
}
// cleanup
multipartConfigElement = null;
parts = null;
uploadedFile = null;
return "OK";
});
}
}
enter code here
package examples.fileUploader;
导入org.eclipse.jetty.util.URIUtil;
进口火花,火花;
导入javax.servlet.MultipartConfigElement;
导入javax.servlet.http.Part;
导入java.io.InputStream;
导入java.nio.file.Files;
导入java.nio.file.Path;
导入java.nio.file.path;
导入java.util.Collection;
公开期末考试
{
公共静态void main(最终字符串…参数)
{
火花口(8888);
Spark.staticFileLocation(“/examples/fileUploader/public/”);
externalLocation(URIUtil.addpath(System.getProperty(“user.dir”),“/src/main/java/examples/fileUploader/public”);
获取(“/hello”,(请求,响应)->“helloworld!”);
Spark.post(“/uploads”,“多部分/表单数据”,(请求,响应)->{
//-Servlet 3.x配置
String location=URIUtil.addpath(System.getProperty(“user.dir”),“/tmp”);//存储文件的目录位置
long maxFileSize=100000000;//上载文件允许的最大大小
long maxRequestSize=100000000;//多部分/表单数据请求允许的最大大小
int fileSizeThreshold=1024;//文件写入磁盘后的大小阈值
MultipartConfigElement MultipartConfigElement=新的MultipartConfigElement(位置、maxFileSize、maxRequestSize、fileSizeThreshold);
request.raw().setAttribute(“org.eclipse.jetty.multipartConfig”,multipartConfigElement);
//-/
集合部件=request.raw().getParts();
用于(零件:零件){
System.out.println(“名称:”);
System.out.println(part.getName());
System.out.println(“大小:”);
System.out.println(part.getSize());
System.out.println(“文件名:”);
System.out.println(part.getSubmittedFileName());
}
字符串fName=request.raw().getPart(“upfile”).getSubmittedFileName();
System.out.println(“Title:+request.raw().getParameter”(“Title”);
System.out.println(“文件:+fName”);
Part uploadedFile=request.raw().getPart(“upfile”);
Path out=Path.get(“/aaa/bbb/”+fName);
try(final InputStream in=uploadedFile.getInputStream()){
文件。复制(输入、输出);
uploadedFile.delete();
}
//清理
multipartConfigElement=null;
parts=null;
uploadedFile=null;
返回“OK”;
});
}
}
在这里输入代码
还有我对Spark的pom依赖
<dependency>
<groupId>com.sparkjava</groupId>
<artifactId>spark-core</artifactId>
<version>2.5.3</version>
</dependency>
com.sparkjava
火花芯
2.5.3
需要更多关于“Jetty内部逻辑触发中止浏览器连接”的详细信息。可能是日志吗?嗨@JoakimErdfelt我已经创建了一个github repo,因此您可以查看示例并使用它,下面是链接