Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Отдача файла из хранилища с помощью Cache  [new]
MasteRus
Member

Откуда:
Сообщений: 46
Доброго времени суток, уважаемые форумчане. Имеется следующая задача:
Есть приложение на CSP, к нему следует привязать внешнее хранилище файлов и отдавать запрашиваемые файлы с помощью этого приложения. Если файлом является картинка или ПДФ, то этот файл должен открываться в браузере.
Пытаюсь это сделать через установку http-headers:
+
  //get filiname with pathpath
  
Set filename=$G(%request.Data("FILENAME",1))
  
//w "FILENAME="_filename_"<BR/>"
  
  
Set stream=##class(%FileBinaryStream).%New()
  
Set stream.Filename=filename
  
filename1=filename
  
  
//find filename in fullpath
  
i=1
  
while ($Pfilename1,"/",i)'=""{
    
purefilename=$Pfilename1,"/",i)
    
i=i+1
  
}
  
//try to get extension
  
i=1
  
while ($Ppurefilename,".",i)'=""{
    
ext=$Ppurefilename,".",i)
  
    
i=i+1
  
}
  
  
//set content type for our response
  //enabledExtensions="jpg,jpeg,bmp,gif,png,pdf,doc,docx"
  
SET ContentType=$CASE(ext,"jpeg":"image/jpeg","jpg":"image/jpeg","png":"image/png","gif":"image/gif","png":"image/png","tif":"image/tiff","tiff":"image/tiff","bmp":"image/bmp","pdf":"application/pdf","doc":"application/msword","docx":"application/msword",:"application/octet-stream")
  
%response.ContentType=ContentType
  
do %response.SetHeader("Content-Description","File Transfer")
  
do stream.OutputToDevice()
Соответственно, файл отображается текстом. Как его вывести в соответствии с типом?
6 ноя 15, 08:19    [18376412]     Ответить | Цитировать Сообщить модератору
 Re: Отдача файла из хранилища с помощью Cache  [new]
eduard93
Member

Откуда:
Сообщений: 167
MasteRus, посмотрите на проект Cache-FileServer, в частности раздачу файлов.
6 ноя 15, 09:16    [18376576]     Ответить | Цитировать Сообщить модератору
 Re: Отдача файла из хранилища с помощью Cache  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3117
Блог
MasteRus,

10074337
14492382

Всё делается намного проще:
<html>
<
head>

<
script language="Cache" method="OnPreHTTP" arguments="" returntype="%Boolean">
  
; Путь к файлу можно указывать абсолютный или относительный.
  ; Примеры:
  ;s %request.Data("FILE",1)="/csp/user/copyright.pdf"
  ;s %request.Data("STREAMOID",1)=..Encrypt(##class(%CSP.StreamServer).GetOidForFile("C:\Каталог А и Б\copyright.pdf"))

  
%request.Data("STREAMOID",1)=..Encrypt(##class(%CSP.StreamServer).GetOidForFile($g(%request.Data("FILENAME",1))))
  
##class(%CSP.StreamServer).OnPreHTTP()
</
script>

<
script language="Cache"  runat="server">
  
##class(%CSP.StreamServer).OnPage()
</
script>

</
head>

</
html>
6 ноя 15, 10:41    [18376975]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить