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

时间:2014-05-11 17:07:02

标签: file-upload download

我正在开展一个项目,我需要允许用户从桌面(基于Python的应用程序),手机(PhoneGap / Cardova)和Web界面(PHP)上传文件。我该怎么用? FTP或HTTP(或许使用PHP POST表单?)或完全不同的东西?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

将HTTP与HTML POST表单一起使用,该表单将文件发送到Python CGI脚本。您可以使用Python作为通用网关接口语言。 (就像使用Python代替PHP一样)

在主网站目录中创建一个“uploads”文件夹,并将下面的代码放入“cgi-bin”文件夹中,作为“save_file.py”。然后,您可以使用网页上的HTML表单上传文件。该字段的名称应为“file”。要使其工作,需要运行实际的服务器。如果您在计算机上将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)