c#winform通过http请求上载文件异常:未找到多部分边界
我正试图使用httpwebrequest将一个文件上传到apache服务器,这是我的c代码c#winform通过http请求上载文件异常:未找到多部分边界,c#,apache,http-post,C#,Apache,Http Post,我正试图使用httpwebrequest将一个文件上传到apache服务器,这是我的c代码 您可以使用2个额外的--创建endBoundary,但从不将其附加到请求的末尾。如果这不能解决问题&您看不到有什么问题,请将您的请求与运行Fiddler的浏览器发出的工作请求进行比较,并查找差异。同时更改为f_request.ContentType=“multipart/form data;boundary=“+strBoundary,当前标头中没有边界=标记。我将该endBoundary添加到requs
您可以使用2个额外的
--
创建endBoundary
,但从不将其附加到请求的末尾。如果这不能解决问题&您看不到有什么问题,请将您的请求与运行Fiddler的浏览器发出的工作请求进行比较,并查找差异。同时更改为f_request.ContentType=“multipart/form data;boundary=“+strBoundary
,当前标头中没有边界=
标记。我将该endBoundary添加到requst with流的末尾。是的,我多次将我的请求与工作请求进行比较,它们都是相同的,除了16位随机字符串,这是一种错误的边界写入方式吗?只要边界足够唯一就可以了<代码>字符串边界=“----------”+Guid.NewGuid()代码>更简单。您需要编辑问题并添加原始请求的捕获
private void buttonSave_Click(object sender, EventArgs e)
{
string url = "http://localhost:8080/AsrServer/FileProjectManage/insertFileProjectForC.action";
string filePath = labelFilePath.Text;
string title = textBoxTitle.Text;
string security = ((ListItem)comboBoxSecurity.SelectedItem).value;
//labelFilePath.Text = security; //test
string comment = richTextBoxComment.Text;
string isShared=string.Empty;
if (checkBoxShared.Checked)
{
isShared = "1";
}
else
{
isShared = "0";
}
try
{
string allChar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
string[] allCharArray = allChar.Split(',');
string boudaryRandom = string.Empty;
int temp = -1;
Random rand = new Random();
for (int i = 0; i < 16; i++)
{
if (temp != -1)
{
rand = new Random(temp*i*((int)DateTime.Now.Ticks));
}
int t = rand.Next(allCharArray.Length - 1);
while(temp==t)
{
t = rand.Next(allCharArray.Length - 1);
}
temp = t;
boudaryRandom += allCharArray[t];
}
string strBoundary = "------WebKitFormBoundary" + boudaryRandom;
HttpWebRequest f_request = null;
HttpWebResponse f_response = null;
f_request = (HttpWebRequest)HttpWebRequest.Create(url);
f_request.Method = "Post";
f_request.ContentType = "multipart/form-data; " + strBoundary;
f_request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36";
f_request.AllowAutoRedirect = true;
f_request.KeepAlive = true;
f_request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
MemoryStream m_stream = new MemoryStream();
//BinaryReader br = new BinaryReader(f_stream);
string endBoundary = strBoundary + "--";
byte[] boundaryBytes = Encoding.ASCII.GetBytes("\r\n" + endBoundary + "\r\n");
//headers
StringBuilder sb = new StringBuilder();
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"file_project_ID\"");
sb.Append("\r\n");
sb.Append("\r\n");
sb.Append("");
sb.Append("\r\n");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"title\"");
sb.Append("\r\n");
sb.Append("\r\n");
sb.Append(title);
sb.Append("\r\n");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"security\"");
sb.Append("\r\n");
sb.Append("\r\n");
sb.Append(security);
sb.Append("\r\n");
sb.Append(strBoundary);
sb.Append("\r\n");
if (isShared == "1")
{
sb.Append("Content-Disposition:form-data; name=\"isShared\"");
sb.Append("\r\n");
sb.Append("\r\n");
sb.Append(isShared);
sb.Append("\r\n");
sb.Append(strBoundary);
sb.Append("\r\n");
}
sb.Append("Content-Disposition: form-data; name=\"comment\"");
sb.Append("\r\n");
sb.Append("\r\n");
sb.Append(comment);
sb.Append("\r\n");
sb.Append(strBoundary);
sb.Append("\r\n");
sb.Append("Content-Disposition: form-data; name=\"file\"; ");
sb.Append("filename=");
sb.Append("\""+ Path.GetFileName(filePath)+"\"");
sb.Append("\r\n");
sb.Append("Content-Type: audio/wav");
sb.Append("\r\n");
sb.Append("\r\n");
sb.Append("\r\n");
//sb.Append(strBoundary);
string postHeader = sb.ToString();
byte[] postHeaderBytes = Encoding.UTF8.GetBytes(postHeader);
FileStream f_stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
long length = postHeaderBytes.Length + f_stream.Length + boundaryBytes.Length;
f_request.ContentLength = length;
Stream requestStream = f_request.GetRequestStream();
requestStream.Write(postHeaderBytes,0,postHeaderBytes.Length);
byte[] buffer = new Byte[checked((uint)Math.Min(4096, (int)f_stream.Length))];
int bytesRead = 0;
while ((bytesRead = f_stream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
}
requestStream.Write(boundaryBytes,0,boundaryBytes.Length);
f_response = (HttpWebResponse)f_request.GetResponse();
Stream s = f_response.GetResponseStream();
StreamReader sr = new StreamReader(s);
string retext = sr.ReadToEnd(); //get response
MessageBox.Show(retext); //test
sr.Close();
}
catch (Exception ex)
{
var msg = ex.Message;
}
}
}
org.apache.commons.fileupload.FileUploadException: the request was rejected because no multipart boundary was found
at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:990)
at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:310)
at org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:334)
at org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:115)
at com.sys.tool.FileUploadUnit.getFileRequestParameter(FileUploadUnit.java:63)
at com.controller.FileProjectManage.insertFileProjectForC(FileProjectManage.java:1466)
at com.controller.FileProjectManage$$FastClassBySpringCGLIB$$4e1c211d.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
at com.controller.FileProjectManage$$EnhancerBySpringCGLIB$$c0c34e50.insertFileProjectForC(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:178)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:444)
at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:432)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at com.filter.PermissionFilter.doFilter(PermissionFilter.java:84)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
------WebKitFormBoundary7kjGYfoFcPBqOm2Y
Content-Disposition: form-data; name="file_project_ID"
------WebKitFormBoundary7kjGYfoFcPBqOm2Y
Content-Disposition: form-data; name="title"
test3
------WebKitFormBoundary7kjGYfoFcPBqOm2Y
Content-Disposition: form-data; name="security"
0
------WebKitFormBoundary7kjGYfoFcPBqOm2Y
Content-Disposition: form-data; name="comment"
------WebKitFormBoundary7kjGYfoFcPBqOm2Y
Content-Disposition: form-data; name="file"; filename="outputfile.wav"
Content-Type: audio/wav
------WebKitFormBoundary7kjGYfoFcPBqOm2Y--