- 后台搭建
- 开心太早
- 另类脚本
- 部署
- 客户端
- 源码
- 核心
- 测试
- 命令清单
- 执行
- 结果
- 总结
- 后台搭建
一直以来,Python的requests库都没能正式的接触到。今天这么一试,才发现原来是这么的强大。感情之前的urllib, urllib2都没这么的智能。于是思量着做了个小工具, 配合PHP写了一个命令行下的文件上传小工具。
后台搭建
开心太早
由于最后会在命令行里面使用,所以用不着什么花哨的界面(其实是写不出来,╭(╯^╰)╮)。
大致的对比了一下,觉得还是前后端一致的好,然后就尝试着使用Python写文件上传处理的后台逻辑。
东西都写好了,利用Flask优雅的路由,实现的一个不错的后台。然后
http://127.0.0.1:5000/upload
完美! 原来这么简单哦。
然而终究是高兴的太早,让我尝试着让局域网中的同学测试一下帮忙测试一下的时候,发现了这个致命的问题。
http://192.168.···
网段内连接超时。 WTF,然后试了几遍还是不行,后来就看代码,一点点的排查,也没有发现什么错误。后来恍然大悟,需要部署到生产服务器上才行,OMG 忙活半天,把这件事给忘了。
然后也不想写了,确切的说不想用Python写了。
另类脚本
然后对比了一下Java和PHP。果断选择了PHP,不是不会用Java,而是不想搞得那么复杂了,建工程,导包,配环境··· ···
用上PHP就好多了,几个函数就搞定了嘛。(因为是自己用,所以错误检查什么的都没做,实际开发中万万不可这样。)
<?php$storagepath = isset($_REQUEST[‘storagepath‘])?$_REQUEST[‘storagepath‘]: "./upload/";$filename = $_FILES[‘file‘][‘name‘];$tempfile = $_FILES[‘file‘][‘tmp_name‘];if(file_exists($storagepath.$filename)) { ???echo $storagepath.$filename." has existed!" ?; ???return;}if(move_uploaded_file($tempfile, $storagepath.$filename)){ ???echo "$filename uploaded succeed, and you can see at $storagepath !";}else{ ???echo $_FILES[‘file‘][‘error‘]; ???echo "failed!";}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
部署
接下来就是部署到服务器上了。先在本地测试了一下,发现正常。然后就远程登录到阿里云的学生机服务器上了。
当然了,我事先是配好PHP+Apache环境了的。
把这个upload.php
文件放到htdoc文件夹下,然后再创建一个upload
文件夹(用于存放上传的文件)。
这样就完成了。如果不放心的话,可以先用浏览器测试一下,出现failed就说明部署成功了。
客户端
客户端当然还是用Python了,毕竟今天的主角是requests嘛。
源码
#coding: utf-8import requestsimport argparse# avoid numbers of http connection requests.adapters.DEFAULT_RETRIES = 5# close urllib3 keep-alive styles = requests.session()s.keep_alive = Falseif __name__ == ‘__main__‘: ???parser = argparse.ArgumentParser(description=‘tool for uploading file.‘) ???parser.add_argument(‘url‘, type=str, help=‘the server url for handling upload work.‘) ???parser.add_argument(‘-f‘, ‘--filepath‘, help=‘the full file path you want to upload‘) ???args = parser.parse_args() ???url = args.url ???filepath = args.filepath ???files = { ???????‘file‘: open(filepath, ‘rb‘) ???} ???# print url ???# print filepath ???result = requests.post(url, files=files) ???print result.text
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
核心
可能明眼的你一下就看出来了,核心就这么一行:
result = requests.post(url, files=files)
指定files就好比是在表单中执行了
enctype=”multipart/form-data”
测试
命令清单
关于客户端如何使用,可以使用help命令,便可输出详细的介绍文档。
python client.py -h
如图:
按照argparse的使用规范,在命令行中键入相对应的参数即可。
执行
python client.py http://112.74.170.6/upload.php -f Spring.png
?如图:
?
结果
然后,远程登录到服务器上,看看到底有没有上传成功吧。
- 对应客户端的输入命令,上传的文件为Spring.png。
- 双击验证图片是否损坏
如此,前后端测试通过。
总结
这里对于简单的文件上传做了下实现,对比实际中会用得到的,这个小工具简直不能入眼。不过还是那句话,贵在尝试。
requests在本次的实验中起到了至关重要的作用。但是其包含的远远不止这些,好有好多东西值得我们前去挖掘。往往精彩就在于细节。
学而时习之,学而时思之。
最后,如果对于那个图片上的水印有兴趣的话。可以参照博主前面的那个水印工具制作。
http://blog.csdn.net/marksinoberg/article/details/53363533
如果懒得弄,也可以留下您的邮箱, 与我取得联系。对于分享大业,在下乐意之至。(^__^) 嘻嘻……
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
简易远程文件上传
原文地址:https://www.cnblogs.com/djuwcnhwbx/p/10325899.html