Я работаю над классическим 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" /> <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