Java Azure逻辑应用程序http post多部分/表单数据文件上载
我正在尝试通过Azure中的HTTP逻辑应用程序调用api 我可以通过邮递员成功地打电话。查看我的PostMan配置 我可以看到postman的http代码是这样的,我用它来使逻辑应用程序的格式与postman的格式相似Java Azure逻辑应用程序http post多部分/表单数据文件上载,java,azure,http,azure-logic-apps,Java,Azure,Http,Azure Logic Apps,我正在尝试通过Azure中的HTTP逻辑应用程序调用api 我可以通过邮递员成功地打电话。查看我的PostMan配置 我可以看到postman的http代码是这样的,我用它来使逻辑应用程序的格式与postman的格式相似 POST /dcma/rest/initiateOcrClassifyExtract HTTP/1.1 Host: godemo.ephesoft.com Authorization: Basic NDU=?????? Cache-Control: no-cache
POST /dcma/rest/initiateOcrClassifyExtract HTTP/1.1
Host: godemo.ephesoft.com
Authorization: Basic NDU=??????
Cache-Control: no-cache
Postman-Token: 3baf23e7-6b46-a5f4-094b-3df1879bbe21
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="000001.pdf"; filename="000001.pdf"
Content-Type: application/pdf
------WebKitFormBoundary7MA4YWxkTrZu0gW
Content-Disposition: form-data; name="batchClassIdentifier"
BC590
------WebKitFormBoundary7MA4YWxkTrZu0gW--
下面是实际的逻辑应用程序http配置
服务器上的日志显示以下错误
2017-09-07 20:12:51,784 [ajp-apr-8009-exec-3] ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/dcma].[DispatcherServlet]- Servlet.service() for servlet [DispatcherServlet] in context with path [/dcma] threw exception [Request processing failed; nested exception is org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; nested exception is org.apache.commons.fileupload.FileUploadException: Header section has more than 10240 bytes (maybe it is not properly terminated)] with root cause
org.apache.commons.fileupload.MultipartStream$MalformedStreamException: Header section has more than 10240 bytes (maybe it is not properly terminated)
at org.apache.commons.fileupload.MultipartStream.readHeaders(MultipartStream.java:541)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:999)
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.parseRequest(CommonsMultipartResolver.java:158)
at org.springframework.web.multipart.commons.CommonsMultipartResolver.resolveMultipart(CommonsMultipartResolver.java:142)
at org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1070)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:912)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.ephesoft.dcma.webapp.AuthenticationFilter.doFilter(AuthenticationFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.ephesoft.dcma.webapp.SessionTimeoutFilter.doFilter(SessionTimeoutFilter.java:43)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:230)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at com.ephesoft.dcma.webapp.HTTPHeaderFilter.doFilter(HTTPHeaderFilter.java:75)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
2017-09-07 20:12:51784[ajp-apr-8009-exec-3]错误org.apache.catalina.core.ContainerBase.[catalina].[localhost]./dcma].[DispatcherServlet].[DispatcherServlet]的Servlet.service()在路径为[/dcma]的上下文中引发异常[请求处理失败;嵌套异常为org.springframework.web.multipart.MultipartException:无法解析多部分servlet请求;嵌套异常为org.apache.commons.fileupload.FileUploadException:头段超过10240字节(可能未正确终止)],根本原因为
org.apache.commons.fileupload.MultipartStream$MalformedStreamException:头段超过10240字节(可能未正确终止)
位于org.apache.commons.fileupload.MultipartStream.readHeaders(MultipartStream.java:541)
位于org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:999)
位于org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.(FileUploadBase.java:965)
位于org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
位于org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:351)
位于org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
位于org.springframework.web.multipart.commons.commonmultipartresolver.parseRequest(commonmultipartresolver.java:158)
位于org.springframework.web.multipart.commons.commonmultipartresolver.resolveMultipart(commonmultipartresolver.java:142)
位于org.springframework.web.servlet.DispatcherServlet.checkMultipart(DispatcherServlet.java:1070)
位于org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:912)
位于org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
位于org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
位于org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
位于org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
位于javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于com.ephesoft.dcma.webapp.AuthenticationFilter.doFilter(AuthenticationFilter.java:52)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
在com.ephesoft.dcma.webapp.SessionTimeoutFilter.doFilter上(SessionTimeoutFilter.java:43)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:230)
位于org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于com.ephesoft.dcma.webapp.HTTPHeaderFilter.doFilter(HTTPHeaderFilter.java:75)
位于org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
位于org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
位于org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
从您提供的日志消息中,我发现您在后端使用了apache.commons.fileupload
库。
因此,我创建了一个简单的servlet web项目,其中包含以下核心代码,并使用apache.commons.fileupload
库来处理上传的文件
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet("/HelloWorldByPostman")
public class HelloWorldByPostman extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public HelloWorldByPostman() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
System.out.println(isMultipart);
if(isMultipart){
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;
try {
items=upload.parseRequest(request);
System.out.println(items.toString());
} catch (FileUploadException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Iterator<FileItem> iterator = items.iterator();
while(iterator.hasNext()){
FileItem item = iterator.next();
if(item.isFormField()){
System.out.println("is txt........"+item.getFieldName());
}else{
System.out.println("is file..........."+item.getFieldName());
}
}
}
response.getWriter().append("Served at: ").append("jaygong");
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
导入java.io.File;
导入java.io.IOException;
导入java.util.Iterator;
导入java.util.List;
导入javax.servlet.ServletException;
导入javax.servlet.annotation.WebServlet;
导入javax.servlet.http.HttpServlet;
导入javax.servlet.http.HttpServletRequest;
导入javax.servlet.http.HttpServletResponse;
导入org.apache.commons.fileupload.FileItem;
导入org.apache.commons.fileupload.FileItemFactory;
导入org.apache.commons.fileupload.FileUploadException;
导入org.apache.commons.fileupload.disk.DiskFileItemFactory;
导入org.apache.commons.fileupload.servlet.ServletFileUpload;
@WebServlet(“/HelloWorldByPostman”)
公共类HelloWorldByPostman扩展了HttpServlet{
私有静态最终长serialVersionUID=1L;
/**
*@参见HttpServlet#HttpServlet()
*/
公共HelloWorldByPostman(){
超级();
//TODO自动生成的构造函数存根
}
/**
*@参见HttpServlet#doGet(HttpServletRequest请求,HttpServletResponse
*(答复)
*/
受保护的void doGet(HttpServletRequest,Htt
{
"$Content-Type": "application/x-www-form-urlencoded",
"$formdata": [
{
"key": "grant_type",
"value": "client_credentials"
},
{
"key": "client_id",
"value": "your clientid"
},
{
"key": "client_secret",
"value": "your client secret"
}
]
}
"body": {
"$content-type": "multipart/form-data",
"$multipart": [
{
"body": "<output-from-trigger-or-previous-action>",
"headers": {
"Content-Disposition": "form-data; name=file; filename=<file-name>"
}
}
]
}
"Content-Disposition": "form-data; name=\"file\"; filename=\"<file-name>\""