DISKUSE
Jak omezit vkládání textu do textového pole z kláv... 
04.04.2024 13:55

HCL Domino na NAS QNAP (1)
20.02.2024 10:34

Vložení přílohy do dokumentu MS Word (3)
14.02.2024 20:54

Problěmy s diakritikou. (4)
06.02.2024 17:34

AI pomocnici 
15.01.2024 10:16

Export do pdf souboru (1)
12.01.2024 23:11

Agent přestává fungovat (1)
18.11.2023 06:42

RTF - Computed (2)
19.10.2023 13:00


ŠKOLENÍ


REKLAMA


KOMENTÁŘE
Diskusní skupina: Notes/Domino R5


Josef VodaSoubory v LS
IT

28.07.2008
08:07:28

ID: 2706.0

Zdravím,
řeším následují problém. Mám přílohu v dokumentu vloženou přes WWW. Načítám ji přes NotesDocument.GetAttachment("Jmeno"). Potřeboval bych z ni načítat data, nejspíše to půjde jen po blocích a postupně ukládat do proměnné jednotlivé bloky. Nakonec vypsat. Jedná se o binární čtení. Zkoušel jsem načítání přes "Open Priloha.Name for binary as F", ale asi to nebude to pravé. Jestli jste to někdo řešil, tak dejte prosím nějakou hlášku. Dík Pepa
Tomáš Hanus Pravé
28.07.2008
16:03:30

ID: 2706.1


Nechodí to, nebo to má chodit jinak? Já s tím problémy neměl.
Josef Voda Soubory v LS
IT

29.07.2008
09:01:04

ID: 2706.2


Nechodí, na konzoli to hlásí, že nemůže najít soubor.
Martin Humpolec Re: Soubory v LS


29.07.2008
10:25:32

ID: 2706.3


Tak on Open otevírá soubor na disku, kdežto GetAttachment ti vrátí odkaz na objekt v dokumentu, takže to moc kompatibilní není. Takže pomocí ExtractFile ho uložit na disk a pak už by to mělo jít.
Josef Voda Soubory
IT

29.07.2008
12:19:38

ID: 2706.4


Vím, že GetAttachment mi vrací odkaz na objekt v dokumentu. Jak jsem kdysi potřeboval http hlavičkum která by vyvola dialog na uložení. Tak tu mám a když ji předám objekt.Name nebo objekt.Source, dialog se objeví, ale neuloží se mi na disk nic. Když dám pravým tl. na myši uložit cíl, tak se příloha uloží. Asi pletu 2 věci dohromady, ale jak donutit aby se objekt(příloha) uložil u klienta na disk a ne přes ExtractFile na disk serveru? Dík
Martin Humpolec Re: Soubory v LS


29.07.2008
16:28:49

ID: 2706.5


Acha, tak té http hlavičce v tom parametru kde specifikuješ cestu k zdrojovému souboru musíš uvést link1 a pak by to mohlo fungovat, pokud jsme usledoval tvé myšlenky :)
Josef Voda Soubory v LS
IT

29.07.2008
16:49:28

ID: 2706.6


Dík za tip, ale bohužel to nefunguje. Mysšlenky jsi usledoval .-)
Tomáš Hanus A co
30.07.2008
11:04:40

ID: 2706.7


link1 kde místo fileattachment příjde třeba priloha.pdf. Pokud jsem usledoval :d tvé myšlenky :D

Josef Voda RE: A co
IT

30.07.2008
11:20:42

ID: 2706.8


To jsem zkoušel, ale hodí to celou cestu jako název souboru spojenou podtržítkem. Potřebuju dostat přílohu na klientský lokální disk. Příloha je v dokumentu daná přes WWW. Načítám ji přes GetAttachment a do http hlavicky dám NotesEmbeddeObject (jmenuje se Priloha), Priloha.Name. Hláška je v pořádku, ale když se dá uložit tak se vytvoří prázdný soubor. Tak nevím co je blbě. Ale dík ?)
Martin Humpolec Re: Soubory v LS


30.07.2008
13:03:58

ID: 2706.9


Hoď sem kus kódu, asi jsme tě neusledovali správně :) nějak žiji v domnění, že stahování souboru jako takového ti funguje, jediné co potřebuješ je udělat link, který zavolá agenta, ten nastaví hlavičky, aby se browser donutil soubor stáhnout a nikoliv otevřít a tam potřebuješ cestu k souboru. Pokud to tak opravdu je, tak jsme snad radili dobře, pokud sem dáš kód toho agenta tak máme šanci pomoci, jinak jenom hádáme.
Tomáš Hanus to Martin Humpolec
30.07.2008
14:29:28

ID: 2706.10


Možná první náležitý příspěvek :)
Josef Voda Kousek kódu
IT

31.07.2008
09:38:49

ID: 2706.11




Set Doc = Db.GetDocumentByUNID(UNID)'Vybere dokument podle predaneho UNID

Dim Priloha As NotesEmbeddedObject

Set Priloha = Doc.GetAttachment(SouborNazev)

Dim Soubor As Variant


Soubor = Evaluate({(@ReplaceSubstring("} + Priloha.Name + {";" ";"%20"))}) 'Uprava mezer

Print ({Content-length:} + Str(Priloha.FileSize))
Print ({Content-desciption: File Transfer})
Print ({Content-disposition: attachment; filename=} + ({./VwAll/} + Doc + {/$FILE/} + Soubor(0))

--------------------------------------------------

Posílám kousek kódu.

Koukal jsem jak to řeší v PHP a tam se musí otevřít soubor a číst data.
Martin Humpolec Re: Soubory v LS


31.07.2008
12:02:30

ID: 2706.12


Jo tak to máš pravdu, pak se tam musí poslat vlastní obsah souboru. V tom posledním řádku tvého kódu stačí napsat vlastní jméno souboru (Soubor(0)), ale jak tam dostat obsah souboru je otázkou.
Co by mohlo zabrat (ale současně jsem to nezkoušel) je
Print [/database.nsf/VwAll/UNID/$File/Soubor(0)] což by mělo udělat přesměrování na další stránku, otázkou je jak zůstanou hlavičky, uvidíš zda to zabere nebo ne.
Josef Voda Soubory v LS
IT

31.07.2008
13:31:14

ID: 2706.13


Tak mi to bohužel nefunguje. Nešlo by nějak přílohu přes GetAttachment otevřít jako soubor třeba v RAM a poslat obsah souboru do prohlížeče?
Martin Humpolec Re: Soubory v LS


31.07.2008
13:58:19

ID: 2706.14


Ono bohužel LS umí pracovat jenom se soubory na disku, tuhle to řešili na codestore.net pomocí Javy a nějak se jim to snad povedlo, tak koukni tam. Zas na druhou stranu proč bys nemohl dát vždy extract na disk serveru, tam odsud načíst pomocí NotesStream, poslat do browseru a nakonec smazat. Akorát přemýšlím zda by mě to za to stálo, nebo bych raději naučil uživatele klikat pravým tlačítkem a dát Save as
Josef Voda Soubory v LS
IT

31.07.2008
14:34:51

ID: 2706.15


S tím NotesStream to nepůjde. Mám verzi R5. Ale asi začnu lidi učit. :-) Díky moc
Josef Voda Soubory v LS
04.08.2008
14:26:19

ID: 2706.16


Ještě zkouším číst ze souboru "Open Soubor for binary access read as #F" a "Get F, , Data". Přesto se nic nenačte a vypadá to, že server skončil v nekonečné smyčce. Get mám v cyklu "Do While Not Eof(F)". Podle helpu by to mělo chodit, ale nechodí. Asi tam mám někde botu ale nevím kde. Díky za případné rady.

Honza K. Re: Soubory v LS
04.08.2008
15:13:25

ID: 2706.17


Jak je inicializovaná proměnná Data? Pokud je to String o proměnné délce a nebyl před použitím nastaven na nějakou hodnotu, pak funkce Get nic nenačte...

Honza
Josef Voda Re:
04.08.2008
15:34:52

ID: 2706.18


Proměnná je deklarovaná "Dim Data As String". A inicializaci mám dělanou (Data=""). Pepa
Honza K. Re
04.08.2008
15:47:34

ID: 2706.19


Pomocí Dim Data as String*1024 získáš string o pevné délce jednoho kilobajtu a přesně tolik dat se do něj uloží. Nevím, jak velký je ten soubor, ale jestli je větší, zkusil bych navyšovat velikost toho string, aby to bylo efektivnější (maximálně do 32 kilo)...

Honza
Josef Voda Re:
04.08.2008
21:17:14

ID: 2706.20


Dík za tip. Soubor má cca. 4 MB, což bohužel asi nepůjde v LS zpracovat. No uvidím, možná by to šlo jako pole, ale asi to je blbost. Pepik
Honza K. Soubory v LS
05.08.2008
08:06:16

ID: 2706.21


Ten soubor budeš číst ve smyčce, ne najednou... Ještě jsem se na to trochu díval, string používá 2 bajty na znak, takže string*1024 vlastně přečte najednou 2 kilobajty. Blbý je, když velikost souboru není přesně násobek velikosti daného stringu, do kterého se načítá (což je vlastně vždy), protože při čtení posledního bloku to vyhodí chybu ohledně pokusu čtení za konec souboru. Ta situace se ale dá odchytit a pak už postupovat po jednom bajtu, což nebude moc efektivní, ale nic jiného s tím asi neuděláš... Pokud to tedy nechceš napsat v Javě, tam je práce se čtením a zapisováním souborů udělaná lépe...

měj se
Honza
Josef Voda Re:
05.08.2008
09:13:00

ID: 2706.22


Dík za tip. V Javě bych to napsal, ale žádné zkušenosti s ní bohužel nemám.

Pepik
Josef Voda Soubory v LS
05.08.2008
12:10:57

ID: 2706.23


Zkouším to číst po blocích ve smyčce, ale nějak mi to nejde.
Honza K. Soubory v LS
05.08.2008
12:39:17

ID: 2706.24


Jak vypadá ten kód?
Josef Voda Soubory v LS
05.08.2008
12:54:51

ID: 2706.25


Dim Data As String*1024
Dim Nacteno As String

Do Until Eof(F)
Get F, , Data
Nacteno=Nacteno+Data
Loop

print Nacteno
Honza K. Soubory v LS
05.08.2008
14:05:27

ID: 2706.26


Myšlenkou je, že načteš kus dat, rovnou s ním něco uděláš, čteš další kus, zase s ním něco uděláš a pořád dokola až do konce souboru. Pokud má ten soubor 4MB, pak bych řekl, že načtení do jednoho řetězce fungovat nebude...

Honza
Josef Voda RE:
05.08.2008
14:14:11

ID: 2706.27


To jo, ale myslel jsem, číst to po blocích a uložit do proměnné, která bude obsahovat již přečtená data a knim ve smyčce připojí další blok. Pokud vím, tak datovej typ string může obsahovat velikost až 2GB dat.

Pepik
Honza K. Soubory v LS
05.08.2008
14:28:37

ID: 2706.28


Beru zpět, máš pravdu, string o proměnné délce je omezen jen dostupnou pamětí. V čem je tedy problém?

H.
Josef Voda RE:
06.08.2008
08:46:29

ID: 2706.29


Problém je v tom, že mi server hlásí overflow i když to mám ve smyčce "Do While Not Eof(F)..... Loop"

Pepik
Honza K. Soubory v LS
06.08.2008
09:45:03

ID: 2706.30


Hmm, nemáš tam nějaké počítadlo?
Josef Voda RE:
06.08.2008
10:42:10

ID: 2706.31


Zkoušel jsem to s ním i bez něj, ale výsledek je stejný. Pepik
Josef Voda RE:
06.08.2008
10:58:09

ID: 2706.32


Zkoušel jsem to s počítadlem i bez něj, ale výsledek je stejnej. Pepik
Honza K. Re:
06.08.2008
13:22:01

ID: 2706.33


Ahoj, omlouvám se za pozdní odezvu, ale obnovoval jsem stránku jako blázen a pořád viděl jen 30 záznamů, až když jsem v URL dal na konci &start=30, viděl jsem další odpovědi.
Takhle je to na dlouhé lokte, nechceš sem dát ten kus kódu, kterým čteš soubor a zpracováváš ho a se zvýrazněným řádkem, kde to hodí tu chybu Overflow? Ještě se v debuggeru podívej, jakou hodnotu ta proměnná má, když to spadne...

Honza
Josef Voda RE:
06.08.2008
13:42:12

ID: 2706.34


dim Precteno as string*1024
dim Data as String

Pozice = 0
Do While Not Eof(F)
If ((Pozice + BlokDat) > Velikost) Then
BlokDat = Velikost
Else
BlokDat = 1024
End If

Precteno = ""

Get F, BlokDat, Precteno

Data = Data + Precteno

Pozice = Pozice + BlokDat
Loop

print Data
Honza K. Re
06.08.2008
16:47:39

ID: 2706.35


Hmm, asi už pro oči nevidím, podle helpu je druhý parametr funkce Get označení pozice, kde se má se čtením dat začít. Podle toho kódu tedy pokaždé začíná na pozici 1024 až na konci čte přesně na konci souboru...

Já to zkoušel na tomhle kódu, víceméně jen otevře vstupní soubor a co načte, zapíše rovnou do výstupního souboru, ale funguje to. Snad ti to pomůže...

on Error Goto errhandler
Dim fileNum As Integer
fileNum = Freefile

Const FILENAME = "c:\temp\input.txt"
Open FILENAME For Binary As fileNum

Dim fileNum2 As Integer
fileNum2 = Freefile
Open "c:\temp\output.txt" For Binary As fileNum2

Const STRING_SIZE = 512

Dim data As String*STRING_SIZE
Dim lastPos As Long 'pozice v souboru pri cteni
Dim fileSize As Long 'velikost souboru
fileSize = Filelen(FILENAME)

'nacitaji se data po 1024 bytech
Do While (lastPos + (STRING_SIZE * 2)) <= fileSize 'string vlastne cte 2 byty
Get fileNum, ,data
Put fileNum2, ,data
lastPos = Loc(fileNum)
Loop

'zbyva mene nez 1024 bajtu, zahlasilo by to chybu, uz musime cist po jednom...
Dim remainder As Long
remainder = fileSize - lastPos

Dim singleChar As Byte
Dim i As Long
For i = 1 To remainder
Get fileNum,, singleChar
Put fileNum2,,singleChar
Next

Close #fileNum
Close #fileNum2

getOut:
Exit Sub

errhandler:
Msgbox Err & ": " & Error & ", line " & Erl & ", position in file " & Loc(fileNum)
Resume getOut
Josef Voda RE:
07.08.2008
12:58:11

ID: 2706.36


Vypadá to zajímavě. Akorát s tím datovým typem Byte budou problémy, proto že mám verzi R5 a zde byte není. No uvidím. Dík
Honza K. Re
07.08.2008
13:52:41

ID: 2706.37


Tak to je pakárna, vůbec jsem si to neuvědomil, pětky jsem neviděl už hrozně dlouho. Podívej se do helpu na přehled datových typů, jestli tam je něco, co zabírá 1 byte...
Analytik Možná tam je funkce
07.08.2008
14:22:29

ID: 2706.38


InputB - čte to po bajtu a ten strkat do výstupu.
Dávej pozor na práva uživatelů pro přístup k souborovému systému.
Potom, když otevíráš soubor na binary čtení, není to omezeno max 256 soubory paralelně?
Dále by (snad) šlo udělat detach souboru do FS a vyprintit do headeru co je potřeba a potom ještě location - v něm dát link na soubor ve fajl systému a mohlo by to fungovat bez problémů.
Ale 5-tky mám někde hooooooooooooodně daleko.
Zkusil bych to.
Také nesmíš zapomenout killnout soubory na serveru - například nočním agentem všechny. A bude posekáno.

Zdar.
Josef Voda RE:
07.08.2008
14:46:34

ID: 2706.39


Koukal jsem, ale bohužel nic neodpovídá. Tak uvidím, jestli to půjde nějak obejít. Pepik
Josef Voda to Analytik
07.08.2008
14:58:08

ID: 2706.40


Soubor mám detachnutý do FS, a zněj se pokuším číst. Nerozumím, ale tomu "location". Pepik
Analytik Popis HTTP 1.1
07.08.2008
16:14:12

ID: 2706.41


14.14 Content-Location

The Content-Location entity-header field MAY be used to supply the resource location for the entity enclosed in the message when that entity is accessible from a location separate from the requested resource's URI. A server SHOULD provide a Content-Location for the variant corresponding to the response entity; especially in the case where a resource has multiple entities associated with it, and those entities actually have separate locations by which they might be individually accessed, the server SHOULD provide a Content-Location for the particular variant which is returned.

Content-Location = "Content-Location" ":"
( absoluteURI | relativeURI )

The value of Content-Location also defines the base URI for the entity.

The Content-Location value is not a replacement for the original requested URI; it is only a statement of the location of the resource corresponding to this particular entity at the time of the request. Future requests MAY specify the Content-Location URI as the request- URI if the desire is to identify the source of that particular entity.

A cache cannot assume that an entity with a Content-Location different from the URI used to retrieve it can be used to respond to later requests on that Content-Location URI. However, the Content- Location can be used to differentiate between multiple entities retrieved from a single requested resource, as described in section 13.6.

If the Content-Location is a relative URI, the relative URI is interpreted relative to the Request-URI.

The meaning of the Content-Location header in PUT or POST requests is undefined; servers are free to ignore it in those cases.

více na linku:
link1
Analytik Zkusil jsem to, tkto
08.08.2008
15:38:39

ID: 2706.42


Print |Content-Length: 566136|
Print |Content-description: File Transfer|
Print |Content-disposition: attachment; filename= Test.pdf|
REM Print |Content-Location = ... link na filesystem ... |
For i = 1 To 566136
Print |A|
Next
Funguje skvěle. PDF obsahuje samé A. Kód si uprav.

Dále bych doporučil následující:
detach souboru do filesystému.
Nastav si header =
Print |Content-Length: 566136|
Print |Content-description: File Transfer|
Print |Content-disposition: attachment; filename= Test.pdf|

dále si dej cyklus:
For i = 1 To pocetbajtu v souboru
neco = Input$ ( 1 , [#]fileNumber )
Print neco
Next

cyklus jde udelat i jinak, ale nemam na to cas.
Snad to pojede v te 5-ce.

Zdar vsem.
Josef Voda RE:
11.08.2008
10:50:44

ID: 2706.43


Tak jsem zkoušelcyklus, ale bohužel celý soubor nenačte. Pepik
Analytik Je potreba se mrknout do Helpu 5-ek
11.08.2008
14:45:37

ID: 2706.44


tam by mel byt example, ktery pouzijes.
Mozna bude lepsi while nez for. Jinak je potreba davat pozor / melo by to byt po znacich bez jejich interpretace vyznamu znaku, jinak to nemusi chodit.
Priklad je syrovy / je potreba ho doladit. Nevim, jestli na to budu mit cas.

Zdar
Josef Voda RE
11.08.2008
20:57:39

ID: 2706.45


Zkoušel jsem to s while i do while ale výsledek byl stejný. Jedu podle helpu, ale výsledky se bohužel nedostavují. Pomohl jsi mi už dost, tak se na to klidně vykašly. Nějak to vyřeším. Když nebude zbytí, tak to vyšvihnu v PHP + MySQL, ale moc se mi do toho nechce. :-( Pepik
Josef Voda Soubory v LS
14.08.2008
13:53:29

ID: 2706.46


Jak teda udělat, aby to vracelo při čtení jen 1 byte a ne 2.

Dík. Pepa

Přidejte názor
Autor:
Profese:
E-mail: i
URL:
Phone:
Předmět:
Obsah příspěvku (i):

Kolikátý je den v měsíci ? (číslovkou bez tečky)