我正在编写一个django应用程序来上传带有表单的文件目录.
这是我正在使用的表单,允许上传目录:
class FileFieldForm(forms.Form):
file_field = forms.FileField(widget=forms.ClearableFileInput(attrs=
{'multiple': True, 'webkitdirectory': True, 'directory': True}))
Run Code Online (Sandbox Code Playgroud)
这是原始邮件有效负载:
------WebKitFormBoundaryPbO3HkrKGbBwgD3sd1
Content-Disposition: form-data; name="csrfmiddlewaretoken"
F575Bgl4U9dzgwePPeSW2ISZKk5c3CnRoqFasdasD0Hep6nD0LnAAObXbF92SUa96NbO2
------WebKitFormBoundaryPbO3HkrKGbBwgDsd31
Content-Disposition: form-data; name="file_field";
filename="MainDir/SubDir1/1.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryPbOasd3HkrKGbBwgD31
Content-Disposition: form-data; name="file_field";
filename="MainDir/SubDir2/2.jpg"
Content-Type: image/jpeg
Run Code Online (Sandbox Code Playgroud)
这是处理表单的视图:
class FileFieldView(FormView):
form_class = FileFieldForm
template_name = 'upload.html'
success_url = 'upload'
def post(self, request, *args, **kwargs):
form_class = self.get_form_class()
form = self.get_form(form_class)
files = request.FILES.getlist('file_field')
if form.is_valid():
for f in files:
pprint("Name of file is " + f._get_name() + ' ' + f.field_name, sys.stderr)
new_file = …Run Code Online (Sandbox Code Playgroud) 问题
我有以下代码片段,用于在文件拖放上传期间获取文件信息:
var files = event.dataTransfer.files;
for (var i = 0; i < files.length; i++) {
var file = files[i];
// I need notDirectory(file) function.
notDirectory(file).then(function(file) {
output.innerHTML +=
`<p>
Name: ${file.name}</br>
Size: ${file.size} bytes</br>
Type: ${file.type}</br>
Modified Date: ${file.lastModifiedDate}
</p>`;
});
}
Run Code Online (Sandbox Code Playgroud)
我做了研究,发现Firefox不支持目录上传,但允许客户端将它们拖放到放置区域.
题
如何在Firefox中过滤掉上传处理程序中的目录?
更新
你可以在这里找到工作样本:https://jsfiddle.net/gevorgha/exs3ta25/
请考虑我需要它来处理最新稳定的Firefox版本--46.0.1而不启用浏览器的额外首选项,因为我不想要求用户启用首选项以使上传正常工作.