我正在使用Django构建仅在本地使用的webapp。在此之前,我几乎没有Web开发,Django和HTML的直接经验。
我希望用户能够在自己的计算机上浏览文件,就像使用<input type="file" [...]>
一样。但是,由于该应用程序仅在本地使用,并且涉及到一些非常大的文件,因此我只希望在按提交时访问文件路径-即,不上传文件数据本身。
使用Django的FileField类,我无法绕过文件上传阶段。我使用了自定义的上传过滤器(并确认它们实际上已被调用),并在其中的几个不同位置尝试了raise SkipFile
,根据我的理解,这至少应该根据文档说明取消上传文件。
我认为我是通过直接输入HTML而不是使用Django的dir_form
来破解它的:
<form action="" method="post" enctype="multipart/form-data">
{% csrf_token %}
<!-- {{ dir_form }} -->
<input type="file" id="docpicker" name="filepath">
<input type="submit" value="Submit" name="file">
</form>
然后我在上载处理程序的不同位置尝试了raise SkipFile
(打印件将按照它们的调用顺序查看):
class SkippingUploadHandler(FileUploadHandler):
def handle_raw_input(self, input_data, META, content_length, boundary, encoding=None):
print(1)
raise SkipFile
def new_file(self, *args, **kwargs):
print(2)
raise SkipFile
def receive_data_chunk(self, raw_data, start):
print(3)
raise SkipFile
但是这些没有帮助。
我希望用户能够在自己的系统中浏览,选择文件并按“提交”。提交时,我希望仅传输文件路径,而不文件内容,就像目前的情况一样。
非常感谢所有帮助(和耐心)!