Golang vs PHP 之文件服务器
2018-07-18 00:50
211 查看
前面的话
作者为golang脑残粉,本篇内容可能会引起phper不适,请慎读!
前两天有同事遇到一个问题,需要一个能支持上传、下载功能的HTTP服务器做一个数据中心。我刚好弄过,于是答应帮他搭一个。
HTTP服务器,首先想到的就是PHP + nginx。于是开撸,先写一个PHP的上传
<?php if ($_FILES["file"]["error"] > 0) { echo "错误:: " . $_FILES["file"]["error"] . "<br>"; } else { if (file_exists("upload/" . $_FILES["file"]["name"])) { echo $_FILES["file"]["name"] . " 文件已经存在。 "; } else { move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]); echo "文件存储在: " . "upload/" . $_FILES["file"]["name"]; } } ?>
好了,写好了!需求完成了!测试一下把!
于是开始第一次测试,结果:失败!
原因是PHP的upload_max_filesize只有2M,上传的文件大小超过限制了。
修改了一下php.ini配置,再次测试可以上传了
那么部署到服务器上去把。服务器上有一个openresty(nginx的系列的web服务器),把upload.php文件丢里面,然后重启服务。好了,又可以测试一下了!
于是第二次测试,结果:失败!
原因是,openresty默认没开php解析,要改下配置。把nginx.conf里的php解析打开一下。重启nginx,然后再测试一下吧~
于是,第三次测试,还是失败!
原来。。这台机器上,虽然有nginx,但是没有安装PHP!!! 想到还要去外网下载PHP,然后还要选版本,然后回来安装还要配置环境变量以及openresty关联php的配置后。。
算了,再见吧 PHP!
轮到Go语言上场的时候了!!
在golang的世界里1行代码就能搞定一个文件服务器
package main import ( "log" "net/http" ) func main() { log.Fatal(http.ListenAndServe(":8038", http.FileServer(http.Dir("./")))) }
就这样,你就可以在本机访问8038端口去下载指定路径的文件了!不需要依赖nginx或者其他任何web服务器
包含上传、下载功能的FileServer.go全部代码如下
package main import ( "fmt" "io" "log" "net/http" "os" ) const ( uploadPath = "./Files/" ) func main() { http.HandleFunc("/upload", uploadHandle) fs := http.FileServer(http.Dir(uploadPath)) http.Handle("/Files/", http.StripPrefix("/Files", fs)) log.Fatal(http.ListenAndServe(":8037", nil)) } func uploadHandle(w http.ResponseWriter, r *http.Request) { file, head, err := r.FormFile("file") if err != nil { fmt.Println(err) return } defer file.Close() filePath := uploadPath + head.Filename fW, err := os.Create(filePath) if err != nil { fmt.Println("文件创建失败") return } defer fW.Close() _, err = io.Copy(fW, file) if err != nil { fmt.Println("文件保存失败") return } io.WriteString(w, "save to "+filePath) }
如何部署
go是静态编译型语言,直接编译出可执行文件,在windows上也就是exe。放到任何一台机器上,不需要安装额外环境,就能直接运行!
所以编译出FileServer.exe文件,丢到服务器机子上执行。
继续测试!结果: 成功,稳!
相关文章推荐
- Golang vs PHP 之文件服务器
- php向服务器上传文件以及图片预览
- apache 服务器设置伪静态 配置文件php
- 服务器会自动加载index.php文件和一些自己的常用疑问
- iphone上传文件到php做的服务器的有关问题
- php实现远程网络文件下载到服务器指定目录(方法一)
- 服务器基于PHP CodeIgniter,Android基于Volley实现多文件/图片上传(含服务器,web版和android客户端完整代码)
- php + smarty 转移服务器或更换站点路径时注意清空编译和缓存文件
- 【VS】加载Microsoft符号服务器文件取消
- 修改PHP服务器文件上传大小限制-apache,lighttpd,nginx
- php使用curl函数往服务器put文件
- PHP中用$_FILES上传服务器文件
- php 上传文件到服务器
- PHP多个文件上传到服务器实例
- ThinkPHP中通过URL重写隐藏应用的入口文件index.php的相关服务器的配置
- Android端通过Okhttp与PHP服务器进行交互并实现文件上传下载(二)
- php 在linux 用fopen() 函数打开,file_get_contents(),fread()函数 读取 另外一台服务器映射过来的文件 总是返回false,null的情况。
- 如何在不会导致服务器宕机的情况下,用 PHP 读取大文件
- Android上传文件到Web服务器,PHP接收文件(一)
- 详解python上传文件和字符到PHP服务器