powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Реализация Download в CACHE
10 сообщений из 10, страница 1 из 1
Реализация Download в CACHE
    #33738526
Lulay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый. Может быть кто подскажет, как реализовать механизм Donwload с помощью CACHE. Механизм должен работать так: на сервер передаётся имя файла, сервер открывает файл, записывает его в поток, а потом должен вернуть полученный таким образом файл, в потоке, по HTML каналу. Класс CSP.Request имет свойство MimeData, через которое на сервер можно залить файл. Можно ли аналогичным способом вернуть файл?
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33748977
Lulay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
<%@ Language=VBScript %>
<%
Response.ContentType = "application/octet-stream"
fname=Request("OrigName")
Response.AddHeader "Content-Disposition", "attachment; filename=" & fname

'NET_DRIVE = "T:"
'NET_SHARE = "\\cache-home-6\i"
'NET_LOGIN = "skm\vershinin"
'NET_PASSWORD = "aaaaaa"
NET_FILE = Request("HashName")
'Set WshShell = Server.CreateObject("WScript.Shell")
'Set WshNetwork = Server.CreateObject("WScript.Network")
'WshNetwork.MapNetworkDrive NET_DRIVE, NET_SHARE, , NET_LOGIN, NET_PASSWORD

Set iStream=Server.CreateObject("ADODB.Stream")
iStream.Open
iStream.Type=1 ' adTypeBinary

iStream.LoadFromFile("D:\WWW\ifiles\"&NET_FILE)
Do While Not (iStream.EOS)
Response.BinaryWrite(iStream.Read(16384))
Loop

'WshNetwork.RemoveNetworkDrive NET_DRIVE, True
iStream.close
Set iStream=Nothing
'Set WshNetwork = Nothing
'Set WshShell = Nothing
%>
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33748986
Lulay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выше пример кода на ASP. Может быть ктонибудь знает, как такое можно сделать на CACHE?
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33749418
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что-то вроде этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<CSP:CONTENT TYPE="application/octet-stream"><SCRIPT Language="Cache" runat="server">
 New fname
 Set fname=$Get(%request.Data("OrigName", 1 ))
 Set stream=##class(%FileBinaryStream).%New()
 Do stream.LinkToFile(filename)
 While 'stream.AtEnd {
   Set line=stream.Read( 32000 )
   Write line
 }
 Set stream=""
</SCRIPT>
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33752954
Peter Zarubin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В свое время я решал такую проблему.
Для ее решения необходимо переопределить метод класса OnPage, OnPreHTTP

Вот код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
/// // Класс на основе %CSP Page для создания ссылок
Class DEATH.myDownload Extends %CSP.Page
{

/// Event handler for <b>PreHTTP</b> event: this is invoked before
/// the HTTP headers for a CSP page have been sent.  All changes to the
/// <class>%CSP.Response</class> class, such as adding cookies, HTTP headers,
/// setting the content type etc. must be made from within the OnPreHTTP() method.
/// Also changes to the state of the CSP application such as changing
/// %session.EndSession or %session.AppTimeout must be made within the OnPreHTTP() method.
/// It is prefered that changes to %session.Preserve are also made in the OnPreHTTP() method
/// as this is more efficient, although it is supported in any section of the page.
/// Return <b> 0 </b> to prevent <method>OnPage</method> from being called.
ClassMethod OnPreHTTP() As %Boolean [ ServerOnly =  1  ]
{
	
	s %response.ContentType="text/plain"
	d %response.SetHeader("Content-Disposition","attachment;filename="_%request.Get("filename"))
	;d %response.SetHeader("Content-Disposition","attachment;filename="_"protocol.PR")
	Quit $$$OK
}

/// Event handler for <b>PAGE</b> event: this is invoked in order to  
/// generate the content of a csp page.
ClassMethod OnPage() As %Status [ ServerOnly =  1  ]
{
	
	s TmpFile=##class(%File).%New(%request.Get("dir")_"\"_%request.Get("filename"))
	
	if TmpFile.Open("RU") {
	  d TmpFile.OutputToDevice() 
	}
	
	d TmpFile.%Close()
	Quit $$$OK
}

}


Моя задача заключалась в том, что на сервере создавался файл протокла загрузки данных и клиенты по ссылке должны были скачать этот протокол.

D request передается 2 параметра, каталог, где хранится файл, который нужно скачать и имя самого файла. Полный путь одним параметром не работает.

На страничке, которая формируется на сервере я сделал ссылку:
Код: plaintext
1.
w "<a href="_"DEATH.myDownload.cls?filename="_fname_"&dir="_sf.UnloadDir_">Скачать файл протокола</a>" 

где sf.UnloadDir - каталог на сервере, где лежит файл, который будут качать клиенты.


Успехов!
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33753280
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.sql.ru/forum/actualthread.aspx?tid=288840
вот здесь обсуждали тему закачки файла
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33971067
Lulay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за отзыв :), буду пробовать :).
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33985447
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё конечно замечательно - но как боротся с тем что когда файл отправлен - форма с методом post отработала - а пользователь нажал Crtl-R ?

Разделять страницы указания файла с формой и приема файлы ?

Подскажите типичное решение - а то совсем голова под вечер не соображает.
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33986056
Maksim UM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делать стандартным образом...
В методе OnPreHTTP, после обработки файла делать переадресацию
что-то вроде:
Код: plaintext
1.
Set %response.Redirect=%request.PageName
...
Рейтинг: 0 / 0
Реализация Download в CACHE
    #33987953
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maksim UMДелать стандартным образом...
В методе OnPreHTTP, после обработки файла делать переадресацию
что-то вроде:
Код: plaintext
1.
Set %response.Redirect=%request.PageName


О! точно ! спасибо.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Реализация Download в CACHE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]