从 POST 请求将文件保存到 Web 服务器

Posted

技术标签:

【中文标题】从 POST 请求将文件保存到 Web 服务器【英文标题】:Save File to Webserver from POST Request 【发布时间】:2015-07-10 17:13:59 【问题描述】:

我在我的网络服务器上的/var/www/cgi-bin 中使用一些 javascript 向 python 脚本发出发布请求,然后在这个 python 脚本中我想将图像文件保存到我的 html 文件夹中,以便以后可以检索它.

位于/var/www/html,但现在我知道如何做到这一点的唯一方法是将python脚本设置为chmod 777,我不想这样做。

那么我还能如何保存我使用 javascript 从网页中获取的文件,然后通过 POST 使用 javascript 发送到服务器?

目前,当我这样做时,我收到一条错误消息,说 python 没有保存权限,因为它的 chmod 是 755

我这里是 python 代码,我知道它可以工作,因为错误只是说我没有写文件的权限

fh = open("/var/www/html/logo.png", "wb")
fh.write(photo.decode('base64'))
fh.close()

【问题讨论】:

嗯...把那个文件放到/tmp 就像fh = open("/tmp/logo.png", "wb")一样? @KevinGuan 什么意思? 所以你想保存一个文件,然后用 JavaScript 发送它,但是没有足够的权限来写文件? @KevinGuan 是的,这是正确的 那如我所说,如果您发送后不需要使用该文件,我认为您可以将文件放入/tmp。因为那个目录的权限是777. 【参考方案1】:

如果您不想将该目录的权限更改为777,您可以将该目录的所有者更改为您的HTTP服务器用户,然后您的Web应用程序的用户将能够将文件写入该目录目录,因为他们拥有该目录的rwx - 7 权限。

为此,通过(因为您使用 Apache 作为 Web 服务器,请记住以 `root 身份登录):

chown -R apache:apache /var/www/cgi-bin/

请记住,只有用户 apacheroot 拥有该目录的 rwx,其他用户拥有 rx

这个命令的意思是:

chown - change the owner of the directory
-R    - operate on files and directories recursively

apache:apache - apache user, apache group
/var/www/cgi-bin/ - the directory

尝试使用man chown 命令查看chown 的手册页并了解更多信息,here's a online version。


如果你需要改回来,我认为该目录的默认用户是root。所以登录为root,然后运行命令:

chown -R root:root /var/www/cgi-bin/

我们解决了问题in chat room。

【讨论】:

【参考方案2】:

错误消息直接表明运行 python 服务器的角色/使用没有对该文件夹的写入权限。您需要分配角色或 Web 服务器用户。确保只提供写访问权限,而不是写+执行访问权限。

【讨论】:

您能否提供更多有关如何执行此操作以及两个选项之间的区别的信息 您使用的网络服务器是什么? 如果这就是你的意思,那就是runnign linux 如何更改用户? 不要更改用户。使用 chmod 命令仅将写入权限分配给网络服务器用户。并且只到那个文件夹

以上是关于从 POST 请求将文件保存到 Web 服务器的主要内容,如果未能解决你的问题,请参考以下文章

如何创建 POST 请求以从本地路径将文件存储在服务器上 - React Native

将信息从 ios 应用程序保存到 Web 服务器 (POST JSON)

我将如何将 JSON 文件从 web 服务保存到本地 JSON 文件?

web安全基础-文件上传(含部分upload-labs靶场通关)

ApacheIISNginx等绝大多数web服务器,都不允许静态文件响应POST请求

如何从laravel route post将数据保存到mysql数据库中