如何在Django中解压包含.shp、.prj、.shx和.dbf的zip文件以便上传到数据库?

0 投票
1 回答
2405 浏览
提问于 2025-04-16 19:02

我在本地目录里用Django上传了一个压缩文件(zip文件)。我该怎么解压它,并把内容存储到三个不同的文件里呢?

好的,让我更详细地解释一下我的问题。

def upload(request):
    if request.method == 'POST':
        form = UploadForm(request.POST, request.FILES)
        if form.is_valid():
            form.handle(request.FILES['file_obj'])
            #form.save() # if a modelform
            #form.cleaned_data['user'] = request.user
            z = zipfile.ZipFile('file_obj')
        for files in z.namelist():
            file(files,'wb').write(z.read(files))

        z.close()

            return render_to_response('uploaded.html', RequestContext(request,{}))
    else:
        form = UploadForm()
    return render_to_response('upload.html', RequestContext(request,{'form': form})

)

这是我的上传表单,应该可以正常工作。file_obj里包含了上传的zip文件。但是它没有任何输出。

1 个回答

0

看起来你并没有真正打开上传的文件,而是打开了当前目录下一个叫做 'file_obj' 的文件。你应该做的是类似下面这样的:

z = zipfile.ZipFile(request.FILES['file_obj'])

另外,我可能错了,但我觉得你根本不需要调用 form.handle(),至少我从来没有用过这个,但也许我会被纠正。

还有,你在这里要非常小心,因为你正在写入 zip 文件中包含的文件名,而这些文件名可能是某个地方的绝对路径。对此你需要特别小心。如果我没说过的话,处理用户创建的内容时要小心,它可能是恶意的。

撰写回答