我希望通过nginx
服务器上传文件。我目前正在运行nginx-1.4.6
,并愿意根据需要移动到最新的nginx-1.5*
。
社区最喜欢的是Valery Kholodkov的nginx-upload-module
,找到here。令人遗憾的是,Valery不再维护此模块,详情为here。截至nginx-1.3.9
,模块部分工作或根本不工作。
我已将nginx-upload-module
编译为nginx-1.4.6
并收到一个错误(客户端cxn已关闭),似乎已修复nginx-1.5.3
changeset。但是我已经应用了补丁并没有运气。
Anatoly稍微过时的帖子here提供了多种解决方案,包括四种解决方案
当我深入研究第二和第四种解决方案时(我不想让lua
成为依赖,但我可能会这样做)我认为向社区提问是合适的:
目前使用nginx-1.5+
上传文件的最佳做法是什么?
让我补充一点,我正在从python
POST
命令上传文件并尝试使用curl
进行测试。 PHP
不在我的技术堆栈上。
答案 0 :(得分:1)
如果你不喜欢php或lua,也许你可以使用perl。
http://nginx.org/en/docs/http/ngx_http_perl_module.html#methods
$ R-> has_request_body(处理程序)
但开箱即用的nginx不是保存收到的帖子请求并存储它的工具。
也许uWSGI(https://uwsgi-docs.readthedocs.io/en/latest/)是使用http-socket https://uwsgi-docs.readthedocs.io/en/latest/HTTP.html和python应用程序的更好方法。
答案 1 :(得分:0)
这是一篇关于你怀疑的好文章。 https://coderwall.com/p/swgfvw
我试过nginx-upload-module。这是一个很好的解决方案,但似乎这对新版本不起作用。 Lua中还有一些模块可以帮助你。在我的情况下,我有业务逻辑,然后我在我的应用程序中实现。
请记住,上传文件的一大问题是FILER。这是botleneck:我做了很多负载测试,向我展示了这个结论。
答案 2 :(得分:0)
Nginx支持'POST'方法,您可以在其中使用大参数。客户端可以使用php或jsp来使用post方法来构建对nginx服务器的请求。
答案 3 :(得分:0)
我意识到这是一个非常古老的问题,但它是谷歌搜索“nginx上传模块”的第一页,它是第一个Stack Overflow结果,所以如果这有助于其他任何人遇到这个问题:
我在nginx 1.10.3上使用nginx-upload-module。正如最初的问题所提到的,Valery Kholodkov不再维护该模块。但是,有几种不同的叉子,其他人已经修改它以使用更新的nginx版本。
这个拉取请求是我用来编译上传模块的nginx的。
https://github.com/vkholodkov/nginx-upload-module/pull/88
如果你使用的是nginx和php-fpm,那么上传模块IMO仍然是最好的解决方案。这个模块允许nginx完全处理上传,直到它们完成,然后处理上传的工作传递给PHP。因此,当用户上传大量文件时,php-fpm进程不会产生瓶颈。
答案 4 :(得分:-7)
快速草稿,但试试这个......
Upload.php
if (isset($_FILES['dlc_file']) && !empty($_FILES['dlc_file'])) {
if (empty($_FILES['dlc_file']['name']) === true) {
echo = "Please choose a file to upload";
} else {
$allowed = array('zip', 'rar', 'gzip', 'tar', '7z', 'png', 'jpg');
$file_name = $_FILES['dlc_file']['name'];
$file_extn = strtolower(end(explode('.', $file_name)));
$file_temp = $_FILES['dlc_file']['tmp_name'];
if (in_array($file_extn, $allowed) === true) {
$file_path = 'dlc/' . substr(md5(time()), 0, 10) . '.' . $file_extn;
move_uploaded_file($file_temp, $file_path);
echo = "Successfully uploaded $file_name";
} else {
$file_types = implode(', ', $allowed);
echo "File type is not allowed, Allowed file types $file_types";
}
}
}
index.php
<form action="upload.php" method="post" enctype="multipart/form-data>
<input type="file" name="dlc_file">
<input type="submit" name="submit" value="Upload">
</form>