Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#winform通过http请求上载文件异常:未找到多部分边界_C#_Apache_Http Post - Fatal编程技术网

c#winform通过http请求上载文件异常:未找到多部分边界

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

我正试图使用httpwebrequest将一个文件上传到apache服务器,这是我的c代码


您可以使用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--