HTTP文件传输

前言

最近在用libcurl写REST接口调用的东西,联想到之前做的HTTP文件传输,又想到在windows下没有搭建成功hexo发布github环境。于是突然有个挺别致的想法:在我的工作机win7下写文章,写好后通过http上传到我的centos7上,然后再在centos上用hexo发布。

怎么样,是不是很别致?写一篇博客文章有N种简单方法,偏偏选这种绕来绕去的方法。算了,权当通过这种方式为近来的工作做笔记了。

搭建HTTP传输服务器

要通过http进行文件传输,首先要有文件传输服务器。搭建http服务器第一反应会出现一大堆工具:windows自带的IIS、apache、tomcat、nginx等。这里不想说IIS,一是不想写windows下的工具,再就是图形界面的操作不截图不好说明,不会截图。这里也不想说nginx,因为nginx有别的主要功能,做文件传输服务器太浪费了。(标记一下以后专门写nginx的文章

一种最简单的方式

直接贴命令

1
2
$ python -m SimpleHTTPServer #默认开80端口,如果80在用执行下面这个指定一个端口
$ python -m SimpleHTTPServer 8000

就一条命令的事,也没有什么配置,想在哪个目录下开服务就在那个目录下执行该命令,实在是简单。

但是,不允许写入文件。

apache httpd

在linux下的http服务器首先想到的肯定是apache(也只能想到他),毕竟有大名鼎鼎的LAMP(标记一下以后专门写LAMP的文章)。
修改配置文件/etc/httpd/conf/httpd.conf,这是centos7上的配置,其他linux下不知道是不是这个位置。

1
2
3
4
5
6
7
<Directory "/var/www/html/upload">
Dav On
AllowOverride None
Options All
Order allow,deny
Allow from all
</Directory>

不知道这些配置都是什么意思,就是从网上抄来的

执行命令chmod 777 /var/www/html/upload,看来777还是比666要管用。
777是什么意思呢?就是二进制的111111111,表示所有用户的读写执行权限都开放,所以以后遇到目录读写权限的问题一律777(其实对http文件传输服务器来说666一样好使)

apache tomcat

用java做web开发肯定第一时间想到的是tomcat了。
修改tomcat的conf下的web.xml,在servlet标签下添加如下配置项

1
2
3
4
<init-param>  
<param-name>readonly</param-name>
<param-value>false</param-value>
</init-param>

意思很明显了,不能只读,我也不知道具体是哪个目录,反正就这样写了。然后建一个web项目,在其WebContent目录下建一个upload目录。(没有亲测,这是从别人那里抄来的

curl命令测试HTTP文件传输

测试下载

1
2
$ curl -o 1.jpg http://ip/upload/a.jpg #指定名
$ curl -O http://ip/upload/a.jpg #原名

测试上传

1
$ curl -T a.jpg http://localhost/upload/

我在windows下传到linux下的中文内容的文件怎么处理?

1
$ iconv -f gbk -t utf-8 1.md > 2.md

我在windows下传到linux下的中文名称的文件怎么处理?

1
2
$ convmv -f gbk -t utf-8 *.md #不直接转,只显示给人看
$ convmv -f gbk -t utf-8 *.md --notest #直接转了

这个问题参考的这篇

java代码测试HTTP文件上传