Как добавить файл в zip-архив и удалить его, используя python? - PullRequest
0 голосов
/ 21 июня 2020

Я пытаюсь создать одно приложение flask для управления документами, где все документы будут находиться в одной папке. когда пользователь захочет загрузить документы, я создам один zip-архив для всех документов, и этот zip-файл вернется с использованием send the file.

@app.route('/adminAction', methods=['POST', 'GET'])
def adminAction():
    status = request.args.get("act")
    if status == "print":
        db.createZip(user_sub, files)
        return send_file('Document.zip', mimetype='zip', attachment_filename='Document.zip', as_attachment=True)
    else:
        db.deleteFiles(user_sub)
        return redirect("admin")

    return render_template("AdminDashboard.html", files = files)

Ошибка выдачи разрешения после печати какой-то строки

file zipped 
file deleted 
file zipped 
127.0.0.1 - - [21/Jun/2020 11:55:53] "GET /adminAction?act=print HTTP/1.1" 500 -
Traceback (most recent call last):
  File "C:\Users\Raviraj Pawar\PycharmProjects\AmirBusiness\VirtualEnv\lib\site-packages\flask\app.py", line 2464, in __call__
File "C:\Users\Raviraj Pawar\PycharmProjects\AmirBusiness\DatabaseHelper.py", line 101, in createZip
    os.remove(user_sub + file)
    PermissionError: [WinError 32] The process cannot access the file because it is being used by another process: 'C:\\Users\\Raviraj Pawar\\PycharmProjects\\AmirBusiness\\Uploaded Documnet\\amirkanai1\\paddy-20200621-060101.pdf'

EDITED PART: - изменена функция createZip и создана новая функция для удаления файла добавлено 10 se c время сна. Пользователь должен получить запрос на выполнение операции.

def createZip(user_sub, files):
    zipf = zipfile.ZipFile('Document.zip', 'w', zipfile.ZIP_DEFLATED)
    for file in files:
        zipf.write(user_sub + file)
    zipf.close()
    print("--------zip file created and moved to trash--------")
    return None


def deleteFiles(user_sub):
    time.sleep(10)
    for filename in os.listdir(user_sub):
        os.remove(user_sub + filename)
        print("deleted ", filename)
    return None 

Любая помощь, предложение будет оценено.

...