如何使用FileField在Django中浏览服务器端文件?

4

像这样的问题,我有一个包含表单的页面

file = forms.FileFIeld(widget = forms.FIleInput())

但这使我能够浏览客户端计算机上的文件。我想显示我的服务器端文件。我完全意识到安全风险。这是我的个人项目,不会被其他人使用(以防有人对我大喊大叫)。它不必是完全相同的机制。我只想从表单中获取这个名称。不应上传或下载任何内容。
这将作为另一个服务器应用程序的文件选择工具。
如果无法浏览整个计算机,我如何指定可以存储文件以供进一步浏览的目录?
2个回答

2
如果您想远程访问计算机上的文件,可以使用ftp或ssh构建系统。如果需要访问特定目录中的文件,则可以将它们放在django的“静态”部分,并使用django serve you static content来提供静态内容。不过,这并不是Django的预期设计,您也可以使用Apache作为http服务器提供文件服务。
如果您想构建类似于Google Docs/Dropbox的Web服务,则Django可以作为Web框架帮助您。但是,您需要运行某种本地索引,并使用PyLucene等工具将所有文件元数据索引添加到数据库中,然后将相同的文件上传到可下载的在线路径或您的“静态”服务文件夹中。这不是Django本身的问题。

我在这个服务器上有一个应用程序,我希望它可以对文件执行一些任务。Django只是此操作的GUI界面。所以我想要做的就是让我选择文件,并将其名称传递给另一个模块。它不能是ssh,因为此GUI还为与此项目无关的其他事务提供服务。 - eclipse
你需要在网页上完成这个任务吗?网络浏览器并不擅长访问本地文件内容。建议使用PyQt或EPD套件来构建桌面应用程序。 - Pratik Mandrekar
我很想使用其他的东西,但整个项目已经在Django中了,文件选择是唯一缺失的部分 :) 而且它必须是Web应用程序以提供远程访问。 - eclipse
那么编写一个脚本,将您需要的文件复制或符号链接到 Web 应用程序的“static”文件夹中,并同时填充数据库以包含路径、文件名和其他可能需要的数据。然后只需列出它们,您不需要小部件或任何其他东西。如果头正确,它们可以被点击并下载。 - Pratik Mandrekar
sshfs可以胜任此工作。1.在客户端创建本地目录(例如/home/remote)。2.连接到服务器'$sshfs -o /path/to/ssh_keys.pem user@server_IP:/the/serverpath/you/want/to/browse /home/remote'。3.使用任何浏览器浏览/home/remote。4.要断开连接,'$fusermount -u /home/remote'。 - user3526918

0

您可以通过您的模型浏览存储的文件。

假设您的模型声明如下

import os
class Document(models.Model):
    name = models.CharField(max_length=64)
    doc_file = models.FileField(upload_to='documents')

您可以像获取其他字段一样获取该文件

names = []
# To browse your saved file, get the containing models
documents = Document.objects.all()
for doc in documents:
    # This is how you get the URL of the file field
    url = doc.doc_file.url
    # If you need the path of the stored file (in the server)
    doc_path = doc.doc_file.path
    # get name and size of the file
    name, size = doc.doc_file.name.split(os.path.sep)[-1], doc.doc_file.size
    names.append(name)
#process your file names
...

然后你只需要处理这个URL,例如将它显示给你的用户。


对不起,也许我表达得不好。我只想像浏览客户端文件一样使用对话框浏览文件。我不想上传/下载任何东西,只需要文件的名称。 - eclipse
抱歉,也许我还没有理解你的问题。我已经更新了我的答案,请看最后一行。它应该能够获取文件的名称。 - pram
如果您想浏览服务器中包含的任何文件,@Pratik已经给出了答案。 - pram

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接