При загрузке ZIP-файла в классическом ASP, я получаю "файл используется другой ошибкой процесса" - PullRequest
0 голосов
/ 20 сентября 2018

Я работаю над классическим asp с приложением vbscript.

Требование: Объедините файлы в папке на сервере в zip-файл и загрузите его.Это должно произойти одним нажатием кнопки.

Чего я достиг: У меня есть кнопка «Консолидация файлов», при нажатии которой открывается окно с надписью «Скачать» и «Закрыть».кнопка.При нажатии на кнопку «Загрузить» отображается приглашение сохранить файл, и пользователь может открыть, сохранить или сохранить как файл.

Код, который я использовал:

x.asp

<input type="button" value="Consolidate Files" id='btn_consolidated' >
<script type="text/javascript">
$('#btn_consolidated').click(function(){window.open('y.asp?id=<%=id%>&dothis=Consolidate',"DownloadWindow", "width=500,height=300")});
</script>

y.asp

dothis = Request("dothis")

Select Case dothis

    Case "Consolidate"
    id = Request("id")
        Dim userId, Code 
        Dim filename1,location1,query,rs1,Zip
        userId = Session("UserId")
        Dim fs, f
        set fs=Server.CreateObject("Scripting.FileSystemObject")
        set zip = new aspZip 

        'location1 = "..\doc\Files\["+userId+"]-"+id
        location1 = dirdefault+"TempUserFiles\"
        if not fs.FolderExists(location1) then
            fs.CreateFolder(location1)
        end if

        query="select Filename,Location, Code from files f where id=" + id + " "
        Set rs1 = conn.Execute(query)

        Code = rs1("Code")
        location1 = location1 + "["+userId+"]-"+rs1("Code")

        'on error resume next

        if fs.FolderExists(location1) then
            fs.DeleteFolder(location1)
        end if
        fs.CreateFolder(location1)    

        'If Err.Number <> 0 Then    
        '    Response.Write(location1)
        'return
        'End if

    'All files in dirdefault + rs1("location") path is added to a zip file
        zip.OpenArquieve(location1+"\"+Code +".zip")    
        do while not rs1.Eof
            f = fs.GetFile(dirdefault + rs1("location"))
            zip.Add(f)
            rs1.MoveNext
            'f.close
        Loop 

        zip.CloseArquieve()
        rs1.close
        set zip = nothing

        set fs = nothing   
        set f = nothing
        Session("fileLocation") = location1+"\"+Code +".zip"
        Response.redirect "Download.asp?id="+id

    Case "Download"

        Dim userFolder

        location1 = Session("fileLocation")
        set zip = nothing
        set fs = nothing   
        set f = nothing

        Set objUpload = Server.CreateObject("Persits.Upload")
        if objUpload.FileExists(location1) then
            objUpload.SendBinary location1', true, "application/octet-stream", true ' this is line 483 where error is throwing
           'response.write "file exists"    
        else
            Response.redirect "fileNotFound.asp?id=" + idFile
        end if
        set objUpload.ActiveConnection = Nothing
        set objUpload = nothing

Download.asp

id = Request("id")
Dim userId, Code, objUpload
Dim filename1,userFolder, location1,query,rs1,Zip
userId = Session("UserId")
Dim fs, f


query="select top 1 Code from MainTable er where er.id = " + id 
Set rs1 = conn.Execute(query)
Code= rs1("Code")
%>
<html>
    <head><title>Download document</title>
        <link rel="stylesheet" type="text/css" href="../css/styles.css" title="dcsStyle">        
        <script language="JavaScript" src="../scripts/jquery-1.9.1.min.js"></script>
        <script language="JavaScript">
            $(document).ready(function(){
                $('#btn_back').click(function () { self.close() });
                $('#btn_Download').click(function () { location = 'y.asp?id=<%=id%>&dothis=Download'; });
            });
        </script>
    </head>
    <body>
        <h1> Consolidated files download for <%=Code%></h1>
    <br />
        <input type ="button" id="btn_Download" value="Download" />&nbsp;&nbsp;<input type='button' id='btn_back' value='Close' />

Работа: x.asp - моя главная страницагде у меня есть кнопка «Объединить файлы».Когда эта кнопка нажата, консолидация файлов в один zip-файл происходит в y.asp в случае «Консолидация».Здесь создается новая папка для каждого уникального номера «Код», и все файлы, взятые из расположения на сервере, добавляются в ZIP-файл и сохраняются в новой папке, которая была создана.

Когда пользователь нажимает «Загрузить»Кнопка «» во всплывающем окне, регистр «Скачать» в y.asp работает, когда файл zip, созданный на предыдущем шаге, доступен для сохранения пользователем на локальном диске.

Проблема: в y.asp в случае «Скачать», я получаю следующую ошибку в

objUpload.SendBinary location1 ', true, «application / octet-stream», true Ошибкапротиворечиво и не происходит все время.Иногда, что бы я ни делал, ошибка сохраняется даже после нескольких попыток загрузки файла.Кроме того, функциональность кейса «Condolidate» всегда работает плавно, и каждый раз создается новый файл.Любая помощь приветствуется.

Ошибка:

Техническая информация (для обслуживающего персонала) • Тип ошибки: Persits.Upload.1 (0x800A001A)) Процесс не может получить доступ к файлу, поскольку он используется другим процессом./myapp/pr/y.asp, строка 483

...