File upload 允许用户跨多个平台上传和下载文件的最佳方式?

File upload 允许用户跨多个平台上传和下载文件的最佳方式?,file-upload,download,File Upload,Download,我正在做一个项目,我需要允许用户从桌面(基于Python的应用程序)、手机(PhoneGap/Cardova)和web界面(PHP)上传文件。我应该用什么来做这个?FTP或HTTP(可能使用PHP POST表单?)或完全其他的东西 您需要的是使用POST请求的通用方法。通常来说,今天的人们将构建一个RESTful API后端。尤其是因为您希望从多种系统类型/设备使用您的服务。JSON也是一种非常容易处理的格式。使用HTTP和HTML POST表单,将文件发送到Python CGI脚本。您可以使用

我正在做一个项目,我需要允许用户从桌面(基于Python的应用程序)、手机(PhoneGap/Cardova)和web界面(PHP)上传文件。我应该用什么来做这个?FTP或HTTP(可能使用PHP POST表单?)或完全其他的东西

您需要的是使用POST请求的通用方法。通常来说,今天的人们将构建一个RESTful API后端。尤其是因为您希望从多种系统类型/设备使用您的服务。JSON也是一种非常容易处理的格式。

使用HTTP和HTML POST表单,将文件发送到Python CGI脚本。您可以使用Python作为通用网关接口语言(这就像在某些事情上使用Python而不是PHP)

在主网站目录中创建一个“uploads”文件夹,并将下面的代码作为“save_file.py”放入“cgi-bin”文件夹中。然后,您可以在网页上使用下面的HTML表单上载文件。字段的名称应为“文件”。要实现这一点,需要运行一个实际的服务器。如果您将html页面作为“文件”打开,它将不起作用file://...“在你的电脑上。此外,您还必须在服务器上启用CGI才能实现这一点

HTML格式:

<form enctype="multipart/form-data" action="../cgi-bin/save_file.py" method="post">
<input type="file" name="file" required>
<button type="submit">Upload</button>
</form>

上传
接收文件的Python脚本。将其另存为“safe_file.py”并放入cgi bin文件夹。如果它从上面的“POST”表单收到一些输入,它将把文件上传到先前创建的“uploads”文件夹中。您可能需要对此脚本进行更多编辑,以便在文件同名时不会覆盖这些文件

import cgi, os
import cgitb; cgitb.enable() #Good debugging module

try: #Adds some useful capabilities on Windows Platform
    import msvcrt
    msvcrt.setmode (0, os.O_BINARY) # stdin  = 0
    msvcrt.setmode (1, os.O_BINARY) # stdout = 1
except ImportError:
    pass

form = cgi.FieldStorage() #Receiving the file from POST form

fileitem = form['file'] #Reading the file
description = ""
if form.getvalue('textcontent'):
    description = form.getvalue('textcontent')

if fileitem.filename:
    fn = os.path.basename(fileitem.filename)
    f = open('uploads/' + fn, 'wb') #Putting the file into uploads folder
    f.write(fileitem.file.read())
    f.close()
    message = 'The file "' + fn + '" was uploaded successfully'

else:
    message = 'No file was uploaded'

print """\
Content-Type: text/html\n
<html><body>
<p>%s</p>
</body></html>
""" % (message)
导入cgi,操作系统
进口cgib;cgib.enable()#良好的调试模块
try:#在Windows平台上添加一些有用的功能
导入msvcrt
msvcrt.setmode(0,os.O_二进制)#stdin=0
msvcrt.setmode(1,os.O_二进制)#stdout=1
除恐怖外:
通过
form=cgi.FieldStorage()#从POST表单接收文件
fileitem=form['file']#读取文件
description=“”
如果form.getvalue('textcontent'):
description=form.getvalue('textcontent')
如果为fileitem.filename:
fn=os.path.basename(fileitem.filename)
f=open('uploads/'+fn,'wb')#将文件放入uploads文件夹
f、 写入(fileitem.file.read())
f、 关闭()
消息='文件'+fn+'已成功上载'
其他:
消息='未上载任何文件'
打印“”\
内容类型:text/html\n
%

“”“%(消息)
所以在桌面和移动应用程序等上,我会通过POST方法上传文件,对吗?这种方法是否有任何安全问题需要注意?使用CGI脚本而不是PHP脚本来处理上传的文件是否有任何好处?@GrimReaper,上传文件时不太可能使用GET方法,因为输入是在URL中编码的,在大多数情况下不能超过2028个字符。此外,就文件上传而言,我认为CGI和PHP之间没有区别。我在回答中使用Python,只是因为我对它更熟悉,而且它被证明是有效的。[本网站比较GET和POST方法](