• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            浪跡天涯

            唯有努力...
            努力....再努力...

            libcurl上傳文件實例

            .

            Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

            When setting CURLOPT_HTTPPOST, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1).


            CURLOPT_POST   --application/x-www-form-urlencoded形式

            A non-zero parameter tells the library to do a regular HTTP post. This will also make the library use the a "Content-Type: application/x-www-form-urlencoded" header. (This is by far the most commonly used POST method).

            Use one of CURLOPT_POSTFIELDS or CURLOPT_COPYPOSTFIELDS options to specify what data to post and CURLOPT_POSTFIELDSIZE or CURLOPT_POSTFIELDSIZE_LARGE to set the data size.

            Optionally, you can provide data to POST using the CURLOPT_READFUNCTION and CURLOPT_READDATA options but then you must make sure to not set CURLOPT_POSTFIELDS to anything but NULL. When providing data with a callback, you must transmit it using chunked transfer-encoding or you must set the size of the data with the CURLOPT_POSTFIELDSIZE or CURLOPT_POSTFIELDSIZE_LARGE option. To enable chunked encoding, you simply pass in the appropriate Transfer-Encoding header, see the post-callback.c example.

            You can override the default POST Content-Type: header by setting your own with CURLOPT_HTTPHEADER.

            Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

            If you use POST to a HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must specify the size in the request.

            When setting CURLOPT_POST to a non-zero value, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1).

            If you issue a POST request and then want to make a HEAD or GET using the same re-used handle, you must explicitly set the new request type using CURLOPT_NOBODY or CURLOPT_HTTPGET or similar.


            以上是兩種POST方式,具體代碼如下:
                ALLUPLOADFILES::iterator iter = allFiles.begin();
                
            //如果含有文件 //name="files"; filename="file1.txt"    
                if( bFileFlag ) //以form-dataf方式post
                {
                    
            for (;iter != allFiles.end();iter++)
                    
            {
                        
            if ( iter->isFile )
                        
            {
                            my_bytestr_url_encode(iter
            ->fileName);
                            curl_formadd(
            &post, &last, CURLFORM_COPYNAME , iter->contrlID.c_str(),
                                CURLFORM_BUFFER, iter
            ->fileName.c_str(),
                                CURLFORM_BUFFERPTR,iter
            ->data.c_str(),
                                CURLFORM_END);    
                        }

                        
            else
                        
            {
                            curl_formadd(
            &post, &last, CURLFORM_COPYNAME , iter->contrlID.c_str(),
                                CURLFORM_COPYCONTENTS,iter
            ->data.c_str(),
                                CURLFORM_END);    
                        }

                    }

                }

                
            else //以application/x-www-form-urlencoded方式post
                {
                    
            for (;iter != allFiles.end();iter++)
                    
            {
                        my_bytestr_url_encode(iter
            ->contrlID);
                        my_bytestr_url_encode(iter
            ->data);
                        postbuffer 
            += iter->contrlID;
                        postbuffer 
            += "=";
                        postbuffer 
            += iter->data;
                        postbuffer 
            += "&";
                    }

                }



                
            if (bFileFlag) 
                    curl_easy_setopt(curl, CURLOPT_HTTPPOST,post);
                
            else 
                
            {
                    curl_easy_setopt(curl, CURLOPT_POST,
            1);
                    curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS  , postbuffer.c_str());
                }


                code 
            = curl_easy_perform(curl);


            對于返回頁面,我們可以和上一篇文章所說那樣,設置write的回調函數,寫入文件即可:
                curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 
            1);
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);

            long writer(void
            *data, int size, int nmemb, string &content)
            {
                long sizes 
            = size * nmemb;
                string temp(data,sizes);
                printf(
            "receive data(%d bytes):\r\n%s",  sizes, (char*)data );
                content 
            += temp; 
                
            return sizes;
            }

            測試:
            我們可以用tomcat寫一個jsp上傳代碼測試一下,其中使用到了smartUpload組件,代碼如下:upload.html
            <form action="upload.jsp" method="post" ENCTYPE="multipart/form-data">

            輸入名稱:
            <input type="type" name="name"><br>

            選擇要上傳的圖片:

            <input type="file" name="pic">

            <input type="submit" value="上傳">

            </form>
            upload.jsp如下:
            <jsp:useBean id="smart" scope="page" class="org.lxh.smart.SmartUpload"/>

            <%
                   
            //上傳初始化
                   smart.initialize(pageContext);
                   
            //準備上傳
                   smart.upload();     
                   
            //保存上傳的文件
                   
            //smart.save("/upload");
                   
            //取得文件的擴展名稱
                   String ext = smart.getFiles().getFile(0).getFileExt();
            %>
            <%
                   
            //String name=request.getParameter("name"); 表單被封裝了,不能用這種方法取值.
                   String name=smart.getRequest().getParameter("name");
            %> 

                   
            //<%=name+"."+ext%>
            <%       //保存文件,包括改名.
                   smart.getFiles().getFile(0).saveAs("/upload/"+name+"."+ext);
            %>

            經測試用libcurl POST文件成功。以上是簡單的測試,比較深入的問題還有待進一步研究。
            由于我對HTTP協議,WEB這塊不是太熟,如果有錯誤理解不當的地方,還請指正,歡迎大家和我探討,謝謝!

            posted on 2008-07-03 16:49 浪跡天涯 閱讀(15644) 評論(3)  編輯 收藏 引用 所屬分類: Lib

            評論

            # re: libcurl上傳文件實例 2008-07-03 21:15 企業即時通訊

            容(提交失敗后,可以通過“恢復上次提交”恢復剛剛提交的內容)   回復  更多評論   

            # re: libcurl上傳文件實例 2008-09-11 13:40 浪跡天涯

            你說的是斷點續傳的問題,目前libcurl好像并不支持!  回復  更多評論   

            # re: libcurl上傳文件實例 2014-01-08 21:08 ]]]]

            ''''  回復  更多評論   

            <2008年9月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            統計

            常用鏈接

            留言簿(22)

            隨筆分類(30)

            隨筆檔案(29)

            文章分類

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            評論排行榜

            久久久久无码精品| 99re久久精品国产首页2020| 国产精品一久久香蕉产线看| 久久人人爽人人澡人人高潮AV| 国产婷婷成人久久Av免费高清| 人人狠狠综合久久88成人| 中文精品久久久久人妻不卡| 日韩欧美亚洲综合久久| 国内精品久久久久影院亚洲| 亚洲人成无码网站久久99热国产| 久久九九免费高清视频| 久久伊人五月天论坛| 一级a性色生活片久久无少妇一级婬片免费放 | 久久久久国产成人精品亚洲午夜| 91久久精品无码一区二区毛片| 日本精品久久久中文字幕 | 亚洲午夜久久久久妓女影院 | 久久精品人人做人人爽97| 91久久精品91久久性色| 91超碰碰碰碰久久久久久综合| 久久国产视屏| 天天躁日日躁狠狠久久| 日本精品久久久中文字幕| 亚洲?V乱码久久精品蜜桃| 久久精品国产亚洲AV忘忧草18| 国产精品久久久久AV福利动漫| 日本免费久久久久久久网站| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 久久噜噜久久久精品66| 久久丫忘忧草产品| 国产成人精品久久一区二区三区 | 久久国产亚洲精品麻豆| 久久综合五月丁香久久激情| 亚洲精品无码久久久久| 国产精品久久久99| 日韩精品久久无码人妻中文字幕| 一本久久久久久久| 久久午夜无码鲁丝片| 久久频这里精品99香蕉久| 国产成年无码久久久久毛片| 亚洲精品99久久久久中文字幕|