我正在尝试上传文件。在servlet中,当我根据请求调用getParts()时,我收到以下错误:
java.io.IOException: Buffer size exceeded: no line terminator
at org.eclipse.jetty.util.ReadLineInputStream.readLine(ReadLineInputStream.java:55)
at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:487)
at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:405)
at org.eclipse.jetty.server.Request.getParts(Request.java:2311)
at org.eclipse.jetty.server.Request.getParts(Request.java:2290)
知道如何解决此错误吗?我研究了很多并且还实施了很多解决方案,但没有任何工作。
带有以下注释的带注释的servlet:
@MultipartConfig
启动Jetty时,将以下配置添加到服务器:(似乎版本9.3.6.v20151106中没有TagLibConfiguration)
WebAppContext root = new WebAppContext();
root.setConfigurations(new Configuration[] {
new AnnotationConfiguration(), new WebXmlConfiguration(),
new WebInfConfiguration(), //new TagLibConfiguration(),
new PlusConfiguration(), new MetaInfConfiguration(),
new JettyWebXmlConfiguration(),
new FragmentConfiguration(), new EnvConfiguration() });
....
....
ServletHolder clientServletHolder = new ServletHolder(new ClientServlet(lwServer, lwServer.getSecureAddress()
.getPort()));
clientServletHolder.getRegistration().setMultipartConfig(new MultipartConfigElement(System.getProperty("java.io.tmpdir")));
....
....
我上传的文件是二进制文件。
如果我在下面尝试
String content = IOUtils.toString(req.getInputStream(), parameters.get("charset"));
byte[] byteArray = content.getBytes();
System.out.println("content len : " + content.length() + " byteArray size : " + byteArray.length);
The output is
content len : 46934 byteArray size : 52864
当我进行文件比较时,内容不匹配。
下面的内容也不匹配。我相信的字符集是UTF-8'。
File saveFile = new File("C:\\test\\downloadedFile.bin");
// opens input stream of the request for reading data
InputStream inputStream = req.getInputStream();
// opens an output stream for writing file
FileOutputStream outputStream = new FileOutputStream(saveFile);
byte[] buffer = new byte[100000];
int bytesRead = -1;
System.out.println("Receiving data...");
while ((bytesRead = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
System.out.println("Data received.");
outputStream.close();
inputStream.close();
AngularJS代码如下:
$('#uploadFileSubmit').click(function(e) {
e.preventDefault();
var value = $('#uploadFileInputValue').val();
var f = document.getElementById('uploadFileInputValue').files[0];
var r = new FileReader();
var fileContent;
r.onloadend = function(e){
fileContent = e.target.result;
};
r.readAsBinaryString(f);
alert("hi !!")
if(value) {
$('#uploadFileModal').modal('hide');
var rsc = {};
rsc["id"] = scope.resource.def.id;
value = lwResources.getTypedValue(fileContent, scope.resource.def.type);
rsc["value"] = value;
$http({method: 'PUT', url: "api/clients/" + $routeParams.clientId + scope.resource.path, data: rsc, timeout:300000, headers:{'Content-Type': 'multipart/form-data'}})
.success(function(data, status, headers, config) { .... }
.error(function(data, status, headers, config) {....});;
但似乎没有解决错误。知道如何解决这个错误吗?