﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-Java JavaScript Web2.0</title><link>http://www.blogjava.net/tmpbuf/</link><description>WWW World, Jack's World</description><language>zh-cn</language><lastBuildDate>Sat, 18 Apr 2026 18:00:24 GMT</lastBuildDate><pubDate>Sat, 18 Apr 2026 18:00:24 GMT</pubDate><ttl>60</ttl><item><title>搞了个CGIC的系列“教程”</title><link>http://www.blogjava.net/tmpbuf/archive/2007/10/25/155872.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Thu, 25 Oct 2007 07:00:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/10/25/155872.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/155872.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/10/25/155872.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/155872.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/155872.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 发布在这里：<a href="http://webdn.trueself.cn/archives/107">http://webdn.trueself.cn/archives/107</a>&nbsp;&nbsp;<a href='http://www.blogjava.net/tmpbuf/archive/2007/10/25/155872.html'>阅读全文</a><img src ="http://www.blogjava.net/tmpbuf/aggbug/155872.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-10-25 15:00 <a href="http://www.blogjava.net/tmpbuf/archive/2007/10/25/155872.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于使用JavaScript解析XML的问题</title><link>http://www.blogjava.net/tmpbuf/archive/2007/10/01/150007.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Sun, 30 Sep 2007 19:15:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/10/01/150007.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/150007.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/10/01/150007.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/150007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/150007.html</trackback:ping><description><![CDATA[大家好，最近我在学习用JavaScript解析XML。但是有点郁闷。<br />
1）<br />
首先我有一个疑惑，网上都在讲如何从一个url载入一个xml文档，然后变成一个xmlDocument，但是能不能把一个字符串转化成一个xmlDocument呢？该如何操作呢？<br />
2）<br />
然后就是从网络载入xmlDocument的话，文件名的后缀一定要是xml才行。我在FireFox里面试过，把文件名的后缀xml去掉，程序就傻了。不光是用load方法如此，用XMLHttpRequest去获取文件也是如此。如果我使用动态服务端技术的话，比如JSP/PHP，服务端的url显然不会是&#8220;.xml&#8221;结尾，那么我又该怎样处理，才能使从服务端传回来的XML格式的数据在浏览器里变成xmlDocument对象呢？<br />
<img src ="http://www.blogjava.net/tmpbuf/aggbug/150007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-10-01 03:15 <a href="http://www.blogjava.net/tmpbuf/archive/2007/10/01/150007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>强烈推荐！专业的Web开发者网络: webdn.trueself.cn</title><link>http://www.blogjava.net/tmpbuf/archive/2007/09/30/149718.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Sat, 29 Sep 2007 17:20:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/09/30/149718.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/149718.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/09/30/149718.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/149718.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/149718.html</trackback:ping><description><![CDATA[先来个链接！<br />
<a title="WebDN" target="_self" href="http://webdn.trueself.cn">http://webdn.trueself.cn</a><br />
<br />
看到这个题目，自己都很肉麻。但这是有原因的。首先声明一下，webdn.trueself.cn只是我的个人网站而已。在注册域名的时候，觉得trueself这个名字很好，又没有被注册，就买下来了。<br />
<br />
然后开始想该放点什么东西，想来想去，决定还是做自己熟悉的技术型blog。由于自己在Web2.0方面有一些经验，于是一拍脑袋，想出了WebDN(其含义为Web Developer Network)这个名字，作为二级域名。<br />
<br />
搞了两天，突然想用百度看看自己被检索没有，这是才发现，原来WebDN这个一级域名被注册了。挺好的，我一点没有眼红。说明WebDN这个名字不错嘛。<br />
<br />
慢慢地，用百度搜索WebDN，我的网站出现在了第一页，排第五。那叫一个开心啊。<br />
<br />
不过几天之后，也就是两三天之前，我被恶心了。那个WebDN不知是不是做了SEO，现在用百度搜索WebDN，出现一堆文章，而文章的标题是他们的域名。想想都知道，哪有正常人把域名当作标题？？我的博客正在被这样一些垃圾文章掩没。<br />
<br />
想想奇怪，我一个小小的博客他们都要搞？ 也许我猜错了。不过今天我也尝试一把SEO，看看把域名放在标题里有啥效果没。<br />
<br />
<img src ="http://www.blogjava.net/tmpbuf/aggbug/149718.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-09-30 01:20 <a href="http://www.blogjava.net/tmpbuf/archive/2007/09/30/149718.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java中的++操作</title><link>http://www.blogjava.net/tmpbuf/archive/2007/09/20/146814.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Thu, 20 Sep 2007 08:50:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/09/20/146814.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/146814.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/09/20/146814.html#Feedback</comments><slash:comments>20</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/146814.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/146814.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 本文正文及所有讨论整理发布于：<a href="http://webdn.trueself.cn/archives/7">http://webdn.trueself.cn/archives/7</a>&nbsp;&nbsp;<a href='http://www.blogjava.net/tmpbuf/archive/2007/09/20/146814.html'>阅读全文</a><img src ="http://www.blogjava.net/tmpbuf/aggbug/146814.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-09-20 16:50 <a href="http://www.blogjava.net/tmpbuf/archive/2007/09/20/146814.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JavaScript中容易犯的大小写问题</title><link>http://www.blogjava.net/tmpbuf/archive/2007/09/17/146011.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Mon, 17 Sep 2007 15:35:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/09/17/146011.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/146011.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/09/17/146011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/146011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/146011.html</trackback:ping><description><![CDATA[JavaScript是区分大小写的语言，而HTML则不区分。<br />
在HTML可以用大写或小写甚至是大小写夹杂表达的地方，在JavaScript中却要多加留意。<br />
比如onclick事件，在JavaScript中一定要全部用小写<br />
看代码：<br />
<div style="border: 1px solid rgb(204, 204, 204); padding: 4px 5px 4px 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: rgb(0, 128, 128);">&nbsp;1</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">html</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;2</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">head</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;3</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">title</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);">JSTest</span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">title</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;4</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">head</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;5</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">body</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;6</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">input&nbsp;type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">button</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;id</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">btn1</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">btn1</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;ONClick</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">alert('hello,&nbsp;this&nbsp;is&nbsp;btn1');</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;&lt;/</span><span style="color: rgb(0, 0, 0);">input</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;7</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">input&nbsp;type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">button</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;id</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">btn2</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;value</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">btn2</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;&lt;/</span><span style="color: rgb(0, 0, 0);">input</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;8</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;</span><span style="color: rgb(0, 0, 0);">script&nbsp;type</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">text/javascript</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&nbsp;charset</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">utf-8</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">&nbsp;9</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;ele</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">document.getElementById(</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">btn2</span><span style="color: rgb(0, 0, 0);">"</span><span style="color: rgb(0, 0, 0);">);<br />
</span><span style="color: rgb(0, 128, 128);">10</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ele.onclick</span><span style="color: rgb(0, 0, 0);">=</span><span style="color: rgb(0, 0, 0);">function(){alert(</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">hello,&nbsp;this&nbsp;is&nbsp;btn2</span><span style="color: rgb(0, 0, 0);">'</span><span style="color: rgb(0, 0, 0);">);}<br />
</span><span style="color: rgb(0, 128, 128);">11</span>&nbsp;<span style="color: rgb(0, 0, 0);">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">script</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">12</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">body</span><span style="color: rgb(0, 0, 0);">&gt;</span><span style="color: rgb(0, 0, 0);"><br />
</span><span style="color: rgb(0, 128, 128);">13</span>&nbsp;<span style="color: rgb(0, 0, 0);">&lt;/</span><span style="color: rgb(0, 0, 0);">html</span><span style="color: rgb(0, 0, 0);">&gt;</span></div>
很明显，第6行，在HTML中引用onclick与第10行在JavaScript中引用onclick事件是不同的。<br />
你可以把第6行"onclick"中的任何一个或若干字母写成大写或小写都没有关系，但是第10行中的onclick必须全部是小写。<br />
<br />
<img src ="http://www.blogjava.net/tmpbuf/aggbug/146011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-09-17 23:35 <a href="http://www.blogjava.net/tmpbuf/archive/2007/09/17/146011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用CGIC实现Web文件上传的服务端代码</title><link>http://www.blogjava.net/tmpbuf/archive/2007/08/30/141501.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Thu, 30 Aug 2007 12:39:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/08/30/141501.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/141501.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/08/30/141501.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/141501.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/141501.html</trackback:ping><description><![CDATA[<div style="text-align: left">&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;用C语言编写cgi程序的话，CGIC是非常流行的库，官方页面及下载地址为：<a href="http://www.boutell.com/cgic/#obtain" target="_blank">www.boutell.com/cgic/#obtain</a><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不少网站都有文件上传的功能，本文展示如何用CGIC库编写文件上传的服务端程序，最后给出一段简单的HTML代码，供大家测试使用。<br />
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; padding-top: 4px; background-color: #eeeeee"><span style="color: #008000">//upload.c</span><br />
<span style="color: #000000">#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">stdio.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
#include</span><span style="color: #000000">&lt;</span><span style="color: #0000ff">string</span><span style="color: #000000">.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">unistd.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">fcntl.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
#include</span><span style="color: #000000">&lt;</span><span style="color: #000000">sys</span><span style="color: #000000">/</span><span style="color: #000000">stat.h</span><span style="color: #000000">&gt;</span><span style="color: #000000"><br />
#include</span><span style="color: #000000">"</span><span style="color: #000000">cgic.h</span><span style="color: #000000">"</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">#define</span><span style="color: #000000">&nbsp;BufferLen&nbsp;1024</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;cgiMain(</span><span style="color: #0000ff">void</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;cgiFilePtr&nbsp;file;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;targetFile;<br />
&nbsp;&nbsp;&nbsp;&nbsp;mode_t&nbsp;&nbsp;&nbsp;&nbsp;mode;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;name[</span><span style="color: #000000">128</span><span style="color: #000000">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;fileNameOnServer[</span><span style="color: #000000">64</span><span style="color: #000000">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;contentType[</span><span style="color: #000000">1024</span><span style="color: #000000">];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;buffer[BufferLen];<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">char</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">*</span><span style="color: #000000">tmpStr</span><span style="color: #000000">=</span><span style="color: #000000">NULL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;size;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;got,t;<br />
&nbsp;&nbsp;&nbsp;&nbsp;cgiHeaderContentType(</span><span style="color: #000000">"</span><span style="color: #000000">text/html</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">取得html页面中file元素的值，应该是文件在客户机上的路径名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cgiFormFileName(</span><span style="color: #000000">"</span><span style="color: #000000">file</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;name,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(name))&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">cgiFormSuccess)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,</span><span style="color: #000000">"</span><span style="color: #000000">could&nbsp;not&nbsp;retrieve&nbsp;filename\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;FAIL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;cgiFormFileSize(</span><span style="color: #000000">"</span><span style="color: #000000">file</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">size);<br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">取得文件类型，不过本例中并未使用</span><br />
<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;cgiFormFileContentType(</span><span style="color: #000000">"</span><span style="color: #000000">file</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;contentType,&nbsp;</span><span style="color: #0000ff">sizeof</span><span style="color: #000000">(contentType));<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">目前文件存在于系统临时文件夹中，通常为/tmp，通过该命令打开临时文件。临时文件的名字与用户文件的名字不同，所以不能通过路径/tmp/userfilename的方式获得文件</span><br />
<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cgiFormFileOpen(</span><span style="color: #000000">"</span><span style="color: #000000">file</span><span style="color: #000000">"</span><span style="color: #000000">,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">file)&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;cgiFormSuccess)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,</span><span style="color: #000000">"</span><span style="color: #000000">could&nbsp;not&nbsp;open&nbsp;the&nbsp;file\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;FAIL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000">=-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">从路径名解析出用户文件名</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">(</span><span style="color: #000000">1</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpStr</span><span style="color: #000000">=</span><span style="color: #000000">strstr(name</span><span style="color: #000000">+</span><span style="color: #000000">t</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">\\</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(NULL</span><span style="color: #000000">==</span><span style="color: #000000">tmpStr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmpStr</span><span style="color: #000000">=</span><span style="color: #000000">strstr(name</span><span style="color: #000000">+</span><span style="color: #000000">t</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">,</span><span style="color: #000000">"</span><span style="color: #000000">/</span><span style="color: #000000">"</span><span style="color: #000000">);</span><span style="color: #008000">//</span><span style="color: #008000">if&nbsp;"\\"&nbsp;is&nbsp;not&nbsp;path&nbsp;separator,&nbsp;try&nbsp;"/"</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(NULL</span><span style="color: #000000">!=</span><span style="color: #000000">tmpStr)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;t</span><span style="color: #000000">=</span><span style="color: #000000">(</span><span style="color: #0000ff">int</span><span style="color: #000000">)(tmpStr</span><span style="color: #000000">-</span><span style="color: #000000">name);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">break</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;strcpy(fileNameOnServer,name</span><span style="color: #000000">+</span><span style="color: #000000">t</span><span style="color: #000000">+</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;mode</span><span style="color: #000000">=</span><span style="color: #000000">S_IRWXU</span><span style="color: #000000">|</span><span style="color: #000000">S_IRGRP</span><span style="color: #000000">|</span><span style="color: #000000">S_IROTH;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">在当前目录下建立新的文件，第一个参数实际上是路径名，此处的含义是在cgi程序所在的目录（当前目录））建立新文件&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;targetFile</span><span style="color: #000000">=</span><span style="color: #000000">open(fileNameOnServer,O_RDWR</span><span style="color: #000000">|</span><span style="color: #000000">O_CREAT</span><span style="color: #000000">|</span><span style="color: #000000">O_TRUNC</span><span style="color: #000000">|</span><span style="color: #000000">O_APPEND,mode);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(targetFile</span><span style="color: #000000">&lt;</span><span style="color: #000000">0</span><span style="color: #000000">){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,</span><span style="color: #000000">"</span><span style="color: #000000">could&nbsp;not&nbsp;create&nbsp;the&nbsp;new&nbsp;file,%s\n</span><span style="color: #000000">"</span><span style="color: #000000">,fileNameOnServer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;FAIL;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp; </span><span style="color: #008000">//</span><span style="color: #008000">从系统临时文件中读出文件内容，并放到刚创建的目标文件中</span><br />
<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;(cgiFormFileRead(file,&nbsp;buffer,&nbsp;BufferLen,&nbsp;</span><span style="color: #000000">&amp;</span><span style="color: #000000">got)&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">cgiFormSuccess){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(got</span><span style="color: #000000">&gt;</span><span style="color: #000000">0</span><span style="color: #000000">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;write(targetFile,buffer,got);&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;cgiFormFileClose(file);<br />
&nbsp;&nbsp;&nbsp;&nbsp;close(targetFile);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">goto</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;END;<br />
FAIL:<br />
&nbsp;&nbsp;&nbsp;&nbsp;fprintf(stderr,</span><span style="color: #000000">"</span><span style="color: #000000">Failed&nbsp;to&nbsp;upload</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
END:&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;printf(</span><span style="color: #000000">"</span><span style="color: #000000">File&nbsp;\</span><span style="color: #000000">"</span><span style="color: #000000">%</span><span style="color: #000000">s\</span><span style="color: #000000">"</span><span style="color: #000000">&nbsp;has&nbsp;been&nbsp;uploaded</span><span style="color: #000000">"</span><span style="color: #000000">,fileNameOnServer);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">0</span><span style="color: #000000">;<br />
}<br />
</span></div>
<span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 假设该文件存储为upload.c，则使用如下命令编辑：<br />
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; padding-top: 4px; background-color: #eeeeee"><span style="color: #000000">gcc&nbsp;-Wall&nbsp;upload.c&nbsp;cgic.c&nbsp;-o&nbsp;upload.cgi</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编译完成后把upload.cgi复制到你部署cgi程序的目录（通常命名为cgi-bin）。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 正式部署时，请务必修改用open创建新文件那一行代码。把open的第一个参数设置为目标文件在服务器上存储的绝对路径，或者相对于cgi程序的相对路径。本例中，出于简单考虑，在cgi程序所在目录下创建新文件。<br />
<br />
<br />
</span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 测试用HTML代码: upload.html<br />
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; padding-top: 4px; background-color: #eeeeee"><span style="color: #0000ff">&lt;!</span><span style="color: #ff00ff">DOCTYPE&nbsp;html&nbsp;PUBLIC&nbsp;"-//W3C//DTD&nbsp;HTML&nbsp;4.01//EN"<br />
&nbsp;&nbsp;&nbsp;"http://www.w3.org/TR/html4/strict.dtd"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">http-equiv</span><span style="color: #0000ff">="Content-Type"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="text/html;&nbsp;charset=utf-8"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000">Test&nbsp;Upload</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">title</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">meta&nbsp;</span><span style="color: #ff0000">name</span><span style="color: #0000ff">="author"</span><span style="color: #ff0000">&nbsp;content</span><span style="color: #0000ff">="Jack"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">&lt;!--</span><span style="color: #008000">&nbsp;Date:&nbsp;2007-08-30&nbsp;</span><span style="color: #008000">--&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">head</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">form&nbsp;</span><span style="color: #ff0000">action</span><span style="color: #0000ff">="cgi-bin/upload.cgi"</span><span style="color: #ff0000">&nbsp;method</span><span style="color: #0000ff">="post"</span><span style="color: #ff0000">&nbsp;enctype</span><span style="color: #0000ff">="multipart/form-data"</span><span style="color: #ff0000">&nbsp;target</span><span style="color: #0000ff">="_blank"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="file"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="file"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">=""</span><span style="color: #ff0000">&nbsp;</span><span style="color: #0000ff">/&gt;</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">&lt;</span><span style="color: #800000">input&nbsp;</span><span style="color: #ff0000">type</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;name</span><span style="color: #0000ff">="submit"</span><span style="color: #ff0000">&nbsp;value</span><span style="color: #0000ff">="OK"</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">form</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">body</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span><span style="color: #0000ff">&lt;/</span><span style="color: #800000">html</span><span style="color: #0000ff">&gt;</span><span style="color: #000000"><br />
</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最后的文件目录结构为<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /MyWebRoot<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |---/upload.html<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |---/cgi-bin<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |------/upload.cgi<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当然，你必须配置能够cgi-bin，并且程序要有权限在cgi-bin目录下创建文件（因为此例把文件上传到cgi-bin目录下）。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 那么如何控制上传文件的大小呢？因为你有时会不允许用户上传太大的文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过分析cgic.c的源代码，我们发现它定义了一个变量cgiContentLength，表示请求的长度。但我们需要首先判断这是一个上传文件的请求，然后才能根据cgiContentLength来检查用户是否要上传一个太大的文件。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cgic.c的main函数中进行了一系列if-else判断来检查请求的类型，首先确定这是一个post请求，然后确定数据的编码方式为 "multipart/form-data"，这个判断通过之后，就要开始准备接收数据了。所以我们要在接收数据开始之前使用 cgiContentLength判断大小，如果超过标准，就立即返回，不允许继续操作。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面贴出修改后代码片段（直接修改cgic.c的源代码即可）：<br />
<div style="padding-right: 5px; padding-left: 4px; font-size: 13px; border-left-color: #cccccc; padding-bottom: 4px; width: 98%; padding-top: 4px; background-color: #eeeeee"><span style="color: #0000ff">else</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cgiStrEqNc(cgiContentType,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">multipart/form-data</span><span style="color: #000000">"</span><span style="color: #000000">))&nbsp;{<br />
#ifdef&nbsp;CGICDEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGICDEBUGSTART<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(dout,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">Calling&nbsp;PostMultipartInput\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGICDEBUGEND&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;/*&nbsp;CGICDEBUG&nbsp;*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">我的代码<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">UpSize:文件长度上限值，以byte为单位，UpSize是一个int变量，因为cgiContentLength的类型为int</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(cgiContentLength</span><span style="color: #000000">&gt;</span><span style="color: #000000">UpSize){&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cgiHeaderContentType(</span><span style="color: #000000">"</span><span style="color: #000000">text/html</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("File too large!\n");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cgiFreeResources();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">我的代码结束</span><span style="color: #008000"><br />
</span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(cgiParsePostMultipartInput()&nbsp;</span><span style="color: #000000">!=</span><span style="color: #000000">&nbsp;cgiParseSuccess)&nbsp;{<br />
#ifdef&nbsp;CGICDEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGICDEBUGSTART<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(dout,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">PostMultipartInput&nbsp;failed\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGICDEBUGEND&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;/*&nbsp;CGICDEBUG&nbsp;*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cgiFreeResources();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;</span><span style="color: #000000">-</span><span style="color: #000000">1</span><span style="color: #000000">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;<br />
#ifdef&nbsp;CGICDEBUG<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGICDEBUGSTART<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fprintf(dout,&nbsp;</span><span style="color: #000000">"</span><span style="color: #000000">PostMultipartInput&nbsp;succeeded\n</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGICDEBUGEND&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #0000ff">#endif</span><span style="color: #000000">&nbsp;/*&nbsp;CGICDEBUG&nbsp;*/</span><span style="color: #000000"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变量UpSize表示文件大小的上限。在cgic.c的main中找到相关代码，并修改成上面这样即可。你可以在cgic.c中定义UpSize，也可以在刚才完成的upload.c中定义，然后在cgic.c中用extern方式引用。<br />
<br />
support my English blog: <a href="http://www.phacai.com/how-to-implement-file-upload-with-cgic" target="_blank">http://www.phacai.com/how-to-implement-file-upload-with-cgic</a><br />
</div>
 <img src ="http://www.blogjava.net/tmpbuf/aggbug/141501.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-08-30 20:39 <a href="http://www.blogjava.net/tmpbuf/archive/2007/08/30/141501.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GWT1.4中，PopupPanel的显示与布局</title><link>http://www.blogjava.net/tmpbuf/archive/2007/08/29/140999.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Wed, 29 Aug 2007 09:51:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/08/29/140999.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/140999.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/08/29/140999.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/140999.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/140999.html</trackback:ping><description><![CDATA[
<SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 在老版GWT中，PopupPanel有两个构造函数：</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public PopupPanel()；</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public PopupPanel(boolean autoHide)；</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 实例化我们的PopupPanel之后，可以设置显示的位置，然后调用show()显示。但是这样只能得到一个模态（modal）Panel，只要它处于可见（isVisible()返回true）状态，我们的页面就不能进行任何操作（除了已经运行起来的JS代码，像发送Ajax请求这样的后台操作），相当与整个Web应用因为</SPAN><SPAN style="font-family: Times New Roman;">显示</SPAN><SPAN style="font-family: Times New Roman;">该Panel而进入了暂停状态。</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 由于PopupPanel可以根据位置参数出现在页面任何地方，所以很适合于实现诸如页面角落上的提示框（比如在页面右上角显示&#8220;loading...&#8221;）等类似的小功能。但是这样的提示框不能暂停浏览器的运行，所以应该是一个非模态（non-modal）的Panel。于是我们通过一种方式来绕过没有适当构造函数的限制：</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 使用RootPanel.get().add(myPanel);来取代myPanel.show();</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 这样就得到了一个非模态的Panel。</SPAN><BR style="font-family: Times New Roman;"><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 在新的GWT1.4中，PopupPanel有三个构造函数：</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public PopupPanel()；</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public PopupPanel(boolean autoHide)；</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; public PopupPanel(boolean autoHide, boolean modal)；</SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 我们看到，我们可以通过构造函数指定是否需要一个模态Panel。如果我们使用第三个构造函数，而且把第二个参数设置为false的话，当我们对该PopupPanel实例调用show()方法的时候，就会得到一个非模态的Panel。<BR><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 但是，如果我们还要用RootPanel.get().add(myPanel)的话，浏览器将忽略我们设置的宽度，和弹出位置等信息，把myPanel添加到页面最下方一个元素的下面，而且其宽度与浏览器客户区的宽度相同。总之，绝不是你想要的结果。</SPAN><BR style="font-family: Times New Roman;"></SPAN><BR style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;"><SPAN style="font-family: Times New Roman;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; 下面给出一个在页面右上角实现消息提示框的方法。</SPAN><BR>
<DIV style="border-left-color: rgb(204, 204, 204); padding-top: 4px; padding-right: 5px; padding-bottom: 4px; padding-left: 4px; background-color: rgb(238, 238, 238); font-size: 13px; width: 98%; "><SPAN style="color: #008080;">&#160;1</SPAN>&#160;<SPAN style="color: #0000ff;">private</SPAN><SPAN style="color: #000000;">&#160;</SPAN><SPAN style="color: #0000ff;">final</SPAN><SPAN style="color: #000000;">&#160;PopupPanel&#160;infoB</SPAN><SPAN style="color: #000000;">=</SPAN><SPAN style="color: #0000ff;">new</SPAN><SPAN style="color: #000000;">&#160;PopupPanel(</SPAN><SPAN style="color: #0000ff;">false</SPAN><SPAN style="color: #000000;">,</SPAN><SPAN style="color: #0000ff;">false</SPAN><SPAN style="color: #000000;">);</SPAN><SPAN style="color: #008000;">//</SPAN><SPAN style="color: #008000;">no&#160;auto-hide,&#160;non-modal&#160;popup</SPAN><SPAN style="color: #008000;"><BR></SPAN><SPAN style="color: #008080;">&#160;2</SPAN>&#160;<SPAN style="color: #008000;"></SPAN><SPAN style="color: #0000ff;">public</SPAN><SPAN style="color: #000000;">&#160;</SPAN><SPAN style="color: #0000ff;">void</SPAN><SPAN style="color: #000000;">&#160;infoBoard(String&#160;info){<BR></SPAN><SPAN style="color: #008080;">&#160;3</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160;&#160;&#160; &#160; </SPAN><SPAN style="color: #0000ff;">if</SPAN><SPAN style="color: #000000;">(infoB</SPAN><SPAN style="color: #000000;">!=</SPAN><SPAN style="color: #0000ff;">null</SPAN><SPAN style="color: #000000;">)<BR></SPAN><SPAN style="color: #008080;">&#160;4</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#160; &#160;&#160; infoB.hide();&#160;&#160;&#160;&#160;<BR></SPAN><SPAN style="color: #008080;">&#160;5</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160;&#160; &#160;&#160; Label&#160;lb</SPAN><SPAN style="color: #000000;">=</SPAN><SPAN style="color: #0000ff;">new</SPAN><SPAN style="color: #000000;">&#160;Label(info);<BR></SPAN><SPAN style="color: #008080;">&#160;6</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160; &#160; &#160; infoB.setWidget(lb);<BR></SPAN><SPAN style="color: #008080;">&#160;7</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160; &#160; &#160;&#160; infoB.show();<BR></SPAN><SPAN style="color: #008080;">&#160;8</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160; &#160; &#160;&#160;&#160; </SPAN><SPAN style="color: #0000ff;">int</SPAN><SPAN style="color: #000000;">&#160;width</SPAN><SPAN style="color: #000000;">=</SPAN><SPAN style="color: #000000;">infoB.getOffsetWidth();<BR></SPAN><SPAN style="color: #008080;">&#160;9</SPAN>&#160;<SPAN style="color: #000000;">&#160; &#160; &#160;&#160;&#160;&#160; infoB.hide();<BR></SPAN><SPAN style="color: #008080;">10</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;</SPAN><SPAN style="color: #0000ff;">int</SPAN><SPAN style="color: #000000;">&#160;clientWidth</SPAN><SPAN style="color: #000000;">=</SPAN><SPAN style="color: #000000;">Window.getClientWidth();<BR></SPAN><SPAN style="color: #008080;">11</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;infoB.setPopupPosition(clientWidth</SPAN><SPAN style="color: #000000;">-</SPAN><SPAN style="color: #000000;">width,&#160;</SPAN><SPAN style="color: #000000;">0</SPAN><SPAN style="color: #000000;">);<BR></SPAN><SPAN style="color: #008080;">12</SPAN>&#160;<SPAN style="color: #000000;">&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;infoB.show();<BR></SPAN><SPAN style="color: #008080;">13</SPAN> <SPAN style="color: #000000;">}</SPAN></DIV>
&#160;&#160;&#160;&#160;&#160;&#160;&#160;
基本思路是，先设置要显示的消息（info），然后因为是在右上角显示，所以要取得消息框的宽度（width），并取得浏览器客户区的宽度（clientWidth），计算（clientWidth-width）就得到了消息框的x坐标（准确地说是左上角那一点的x坐标）。<BR>&#160;&#160;&#160;&#160;&#160;&#160;&#160; 7～9的代码好像很奇怪，但只有这样才能取得消息框的宽度。当PopupPanel处于不可见状态时，调用getOffsetWidth()必将返回0。因为浏览器不知道宽度。原因如下：<BR>&#160;&#160;&#160;&#160;&#160;&#160;&#160; 你的PopupPanel可能会被CSS修饰，可能通过百分比设置了宽度，也可能设置了边框等属性，所以无法得知到底占用了多少个像素的宽度。只有处于可见状态时才能得到其宽度。<BR> </SPAN>  <img src ="http://www.blogjava.net/tmpbuf/aggbug/140999.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-08-29 17:51 <a href="http://www.blogjava.net/tmpbuf/archive/2007/08/29/140999.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>GWT 1.4 stable 上线</title><link>http://www.blogjava.net/tmpbuf/archive/2007/08/29/140809.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Wed, 29 Aug 2007 03:00:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/08/29/140809.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/140809.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/08/29/140809.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/140809.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/140809.html</trackback:ping><description><![CDATA[
<P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">1.4 RC已经升级为正式发行版了，上线时间差不多为今天的北京时间4:00 am</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><A href="http://code.google.com/webtoolkit/" target="_blank">http://code.google.com/webtoolkit/</A></P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">这是论坛里的发布通知：</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><A href="http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e691e4059b3f991e " target="_blank">http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/e691e4059b3f991e</A></P><img src ="http://www.blogjava.net/tmpbuf/aggbug/140809.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-08-29 11:00 <a href="http://www.blogjava.net/tmpbuf/archive/2007/08/29/140809.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于Namespace, YUI和Dojo对此问题的异同</title><link>http://www.blogjava.net/tmpbuf/archive/2007/08/28/140602.html</link><dc:creator>Jack L</dc:creator><author>Jack L</author><pubDate>Tue, 28 Aug 2007 11:10:00 GMT</pubDate><guid>http://www.blogjava.net/tmpbuf/archive/2007/08/28/140602.html</guid><wfw:comment>http://www.blogjava.net/tmpbuf/comments/140602.html</wfw:comment><comments>http://www.blogjava.net/tmpbuf/archive/2007/08/28/140602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tmpbuf/comments/commentRss/140602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tmpbuf/services/trackbacks/140602.html</trackback:ping><description><![CDATA[


<P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">YUI和Dojo的widget都必须存在于自己的名字空间内，这些名字空间是预先建立好的。 那么，如果我们要建立自己的名字空间怎么办呢？（产生这种需求的原因通常是，我们要管理难以管理的JavaScript代码。）</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><BR></P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">在YUI中：</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#160;执行</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">1. YAHOO.namespace ("myspace");</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#160;然后你就拥有了YAHOO.myspace这个名字空间，可以进行类似如下的操作：</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">2. YAHOO.myspace.alertHello=function() {alert("Hello");}</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">实质上，YUI.namespace相当于建立了一个表项，准确地说是相联数组(associative array)的一项。 我们可以用以下两句代替上面的1、2语句</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">1）YAHOO["myspace"]=new function(){};</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">2）YAHOO["myspace"].alertHello=function(){ alert("Hello");};</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">而且1、2与1）、2）可以交叉组合使用。</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#160;不管你使用哪种方式创建自己的名字空间，都有两种方式调用alertHello</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">a. YAHOO["myspace"].alertHello();</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">b. YAHOO.myspace.alertHello();</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica; min-height: 14.0px"><BR></P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">在Dojo中：</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">使用方式参考：<A href="http://dojotoolkit.org/book/dojo-book-0-4/part-4-more-widgets/writing-your-own-widget/custom-namespace" target="_blank">dojo_custom-namespace</A>；</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">Dojo.require()提供了更强大的名字空间管理工具：Dojo用module来对应名字空间的含义。 我尚为对其相关函数的原理进行深入研究，也没有寻找等价的使用方式。</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">&#160;但是，注意手册中这句话：&#8220;First of all, you'll want to create a directory structure ...&#8221;。也就是说，Dojo的module一定要对应一个js文件。</P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica">所以dojo.require机制不是为了创建只存在于逻辑上的名字空间。 dojo.require一定会去下载相应的js文件，参考dojo 0.9的手册： <A href="http://dojotoolkit.org/book/dojo-book-0-9/part-3-programmatic-dijit-and-dojo/modules-and-namespaces/what-does-dojo-require-" target="_blank">dojo-require</A></P><P style="margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px Helvetica"><BR></P><img src ="http://www.blogjava.net/tmpbuf/aggbug/140602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tmpbuf/" target="_blank">Jack L</a> 2007-08-28 19:10 <a href="http://www.blogjava.net/tmpbuf/archive/2007/08/28/140602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>