Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Реализация Download в CACHE / 10 сообщений из 10, страница 1 из 1
19.05.2006, 13:37
    #33738526
Lulay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
День добрый. Может быть кто подскажет, как реализовать механизм Donwload с помощью CACHE. Механизм должен работать так: на сервер передаётся имя файла, сервер открывает файл, записывает его в поток, а потом должен вернуть полученный таким образом файл, в потоке, по HTML каналу. Класс CSP.Request имет свойство MimeData, через которое на сервер можно залить файл. Можно ли аналогичным способом вернуть файл?
...
Рейтинг: 0 / 0
24.05.2006, 15:54
    #33748977
Lulay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
<%@ 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
24.05.2006, 15:55
    #33748986
Lulay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
Выше пример кода на ASP. Может быть ктонибудь знает, как такое можно сделать на CACHE?
...
Рейтинг: 0 / 0
24.05.2006, 17:38
    #33749418
Maksim UM
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
Что-то вроде этого:
Код: 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
26.05.2006, 04:14
    #33752954
Peter Zarubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
В свое время я решал такую проблему.
Для ее решения необходимо переопределить метод класса 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
26.05.2006, 10:04
    #33753280
u78
u78
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
http://www.sql.ru/forum/actualthread.aspx?tid=288840
вот здесь обсуждали тему закачки файла
...
Рейтинг: 0 / 0
07.09.2006, 14:34
    #33971067
Lulay
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
Большое спасибо за отзыв :), буду пробовать :).
...
Рейтинг: 0 / 0
13.09.2006, 20:12
    #33985447
Ptn
Ptn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Реализация Download в CACHE
Всё конечно замечательно - но как боротся с тем что когда файл отправлен - форма с методом post отработала - а пользователь нажал Crtl-R ?

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

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


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


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