Das Notes Forum

Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: pallas am 26.12.10 - 11:34:19

Titel: Datei per LS-Agent ausgeben
Beitrag von: pallas am 26.12.10 - 11:34:19
Hallo,

ich möchte per Lotusskript im Web eine Datei an den Browser ausgeben, die ich zuvor von der Platte geladen habe.
Da die auszugebenden Dateien oft im Bereich von einigen MB sind muss ich die Daten in mehreren Schritten per "get" einlesen und "print" ausgeben.
Mein Problem liegt jetzt darin, dass "print" jedes mal auch ein Line-Feed (x0A) schickt und somit die Datei zerstört wird.

Wie kann ich eine Datei, die ich von der Platte einlese eins zu eins an den Browser weiterleiten ???

Im Voraus vielen Dank für Eure Hilfe.

Gruß Thorsten
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: m3 am 26.12.10 - 12:10:10
Wenn sie eh auf der Platte liegen, würde ich eine Directory Rule (http://www-12.lotus.com/ldd/doc/domino_notes/Rnext/help6_admin.nsf/b3266a3c17f9bb7085256b870069c0a9/a5e4b2f240e7763785256c1d00397bac?OpenDocument) einrichten, sodass man die Files direkt über den Browser adddressieren kann.
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: pallas am 26.12.10 - 12:15:20
Hallo,

der Dateinamen wird erst während des Ladens generiert und die Daten kommen aus unterschiedlichen Quellen, sodass eine Directory Rule nicht verwendet werden kann.
Außerdem soll ein direkter Zugriff nicht möglich sein.

Gruß THorsten
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: m3 am 26.12.10 - 14:10:00
Ah, hätte diese Info nicht in Deine urspüngliche Frage gehört? ;)

Nachdem Du noch immer nicht spezifiziert hast, WAS Du eigentlich zurückliefern willst, muss ich mal raten:

1) Du kannst in Lotusscript keine Binärdaten an den Browser zurückliefern. Wenn Du PDFs, ... zurückliefern willst, musst Du das in ein temporäres Dokument anhängen und den User darauf referenzieren.

2) IIRC hängt ein Lotusscript Print in einem Webagent nicht automatisch ein CRLF an - kann es sein, dass das aus Deinen Ursprungsdaten kommt?

3) Bei mehreren MBs wirst Du ev. in Agent Laufzeit und timing Probleme laufen - hast Du darüber schon nachgedacht?

Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: pallas am 26.12.10 - 14:39:29
Hallo,

zu 1.: es werden Binärdaten zurückgeliefert - nur eben mit mehreren Line-Feeds
zu 2.: die LF sind nicht Bestandteil der Ursprungsdaten, da ich die Daten auch ohne Probleme direkt aus den Quellen, auf die der Webuser keinen Zugriff hat, verarbeiten kann.
zu 3.: Laufzeitprobleme haben wir keine. wir können ca. 40MB/s über den Agenten liefern ohne, dass sich irgend etwas an der Performance negativ bemerkbar macht.

Ich werde das ganze jetzt mit einem CGI lösen, dass sich die nötigen Daten noch aus der DB holt.

Gruß Thorsten
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: pram am 27.12.10 - 10:07:45
In der Hilfe steht zwar
Zitat
Semicolon at end of exprList:   The next Print statement continues printing on the same line, with no spaces or carriage returns inserted.
Es tut aber nicht wie gewünscht

Gruß
Roland
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: Peter Klett am 03.01.11 - 08:27:53
In der Hilfe steht zwar
Zitat
Semicolon at end of exprList:   The next Print statement continues printing on the same line, with no spaces or carriage returns inserted.
Es tut aber nicht wie gewünscht

Gruß
Roland

Nur in dem skizzierten Umfeld? Ich nutze das öfters zum Schreiben von Dateien, da funktioniert das sehr gut

Print #filenum, "Mein Text" ;
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: atbits am 03.01.11 - 08:47:11
Warum hängst Du das File nicht in ein temporäres Notesdocument und adressiertst es einfach so?
Dann über einen periodischen CleanUp Agent das temp-doc wieder löschen.

David
Titel: Re: Datei per LS-Agent ausgeben
Beitrag von: pram am 03.01.11 - 11:48:18
Ein
Print "Mein ";
Print "Text"

erscheint sowohl in der Statusleiste des Clients als auch im Browser als
Code
Mein
Text

Habe aber grad was probiert. Es gibt einen Trick, indem man http://en.wikipedia.org/wiki/Chunked_transfer_encoding verwendet:


Code
Sub Initialize
	Print "Content-Type: text/plain"
	Print "Transfer-Encoding: chunked"
	chunck "Mein "
	chunck "Text"
	
End Sub


Sub chunck(s As String)
	Print Hex(Len(s))
	Print s
End Sub

Der Browser gibt dann "Mein Text" aus.

Gruß
Roland