HttpClient 提交附件:Corrupt form data: prema


出现:Corrupt form data: premature ending错误。

客户端是别人写的,动不了代码,如下:


//设置连接时间
RequestConfig reqconfig = RequestConfig.custom()  
        .setConnectTimeout(30000).setConnectionRequestTimeout(15000)  
        .setSocketTimeout(30000).build();  
// 文件参数设置
HttpPost httppost = new HttpPost(server_url);
MultipartEntity mpEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName(HTTP.UTF_8)); // 如果Charset.forName(HTTP.UTF_8)写为null就没错了。
ContentBody cbFile = new FileBody(file);
mpEntity.addPart("file", cbFile);
httppost.setEntity(mpEntity);
HttpResponse response = httpclient.execute(httppost);


服务端接收代码:

List<UploadFile> uploadFiles = this.getFiles();

异常的位置在cos-2019.8.jar的MultipartParser.java, 207 line:

 String line = readLine();
  if (line == null) {
    throw new IOException("Corrupt form data: premature ending");
  }
  // See if this line is the boundary, and if so break
  if (line.startsWith(boundary)) {
    break;  // success
  }
} while (true);

附件都换了几个,大小100K


请求帮助。


P.S: 用commons-upload.jar (纯手工接收file),或者不用jfinal,改为springmvc都可以接收附件。



评论区

JFinal

2019-09-18 09:37

服务端接收文件改用 commons-upload.jar 试一下,将 getFile() 去除,使用如下大致的代码结构:
HttpServletRequest request = getRequest();

然后将 request 这个对象传递给 commons-upload.jar 中的相关类进行解析,commons-upload.jar 中提供了对于 HttpServletRequest 类型对象的解析类

此外,建议先检查一下是不是 getFile() 使用的时机不对,如果有拦截器的话,也要在拦截器中首先调用
getFile()
否则无法正常工作,这个在文档中有过说明:
https://www.jfinal.com/doc/3-11

ipan

2023-11-13 22:15

不会吧,我也遇到点问题。

热门反馈

扫码入社