小弟刚接触python ,感觉这门语言是如此的神奇。最近,想帮同事写一个能通过post 上传文件的脚本。到网上一搜,有几个模块可以用,用的最多的是MultipartPostHandler和poster。网上的资料也有例子,不过很坑爹啊,都是把官方的例子给复制出来到处粘贴,有木有啊。按照例子实验,怎么都不能成功,不知道为何。下面,我贴出代码,希望高手们能帮忙。代码是临时写的测试用的:
1 index.php 2 3 <html> 4 <body> 5 6 <form name="upload" action="upload.php" method="post" enctype="multipart/form-data"> 7 <label for="file">Filename:</label> 8 <input type="file" name="filename" id="file" /> 9 <br /> 10 <input type="submit" name="submit" value="Submit" /> 11 </form> 12 13 </body> 14 </html>
upload.php <?php if(isset($_POST["submit"])){ if ($_FILES["filename"]["error"] > 0) { echo "Error: " . $_FILES["filename"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["filename"]["name"] . "<br />"; echo "Type: " . $_FILES["filename"]["type"] . "<br />"; echo "Size: " . ($_FILES["filename"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["filename"]["tmp_name"]."<br/>"; move_uploaded_file($_FILES["filename"]["tmp_name"],$_FILES["filename"]["name"]); echo "Stored in: ".$_FILES["filename"]["name"]; } } ?>
#filename:uploadFile3.py #module:MultipartPostHandler import MultipartPostHandler, urllib2, cookielib,time cookies = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies), MultipartPostHandler.MultipartPostHandler) params = {'filename':open("1.xls","rb")} opener.open("http://127.0.0.1/upload/",params) time.sleep(10) print "handle the request"
1 # -*- coding: gbk -*- 2 #module of poster 3 #filename:uploadFile2.py 4 from poster.encode import multipart_encode 5 from poster.streaminghttp import register_openers 6 import urllib2,sys 7 8 register_openers() 9 10 datagen,headers = multipart_encode({'filename':open("1.xls","rb"),'name':'filename','action':'upload.php'}) 11 request = urllib2.Request("http://127.0.0.1/upload/",datagen,headers) 12 13 print urllib2.urlopen(request).read()
悲剧的是,这两种方法都没能实现上传哦。请各位大神给予指点。非常感谢。