<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://m204wiki.rocketsoftware.com/index.php?action=history&amp;feed=atom&amp;title=Uploading_files_to_a_Janus_Web_Server</id>
	<title>Uploading files to a Janus Web Server - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://m204wiki.rocketsoftware.com/index.php?action=history&amp;feed=atom&amp;title=Uploading_files_to_a_Janus_Web_Server"/>
	<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;action=history"/>
	<updated>2026-04-19T09:50:00Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;diff=82326&amp;oldid=prev</id>
		<title>ELowell at 21:46, 5 January 2016</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;diff=82326&amp;oldid=prev"/>
		<updated>2016-01-05T21:46:26Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 21:46, 5 January 2016&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l31&quot;&gt;Line 31:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 31:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;web request.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;web request.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;More information on producing these special&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;More information on producing these special&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;format procedures is available in [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#&lt;/del&gt;Loading with the SIRPIPE and SIRPUT &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Utilities&lt;/del&gt;|Loading with the SIRPIPE and SIRPUT &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Utilities&lt;/del&gt;]],&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;format procedures is available in [[Loading with the SIRPIPE and SIRPUT &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;utilities&lt;/ins&gt;|Loading with the SIRPIPE and SIRPUT &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;utilities&lt;/ins&gt;]],&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[#HTTP PUT support|HTTP PUT support]], and [[#Form-based uploads|Form-based uploads]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;[[#HTTP PUT support|HTTP PUT support]], and [[#Form-based uploads|Form-based uploads]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l68&quot;&gt;Line 68:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 68:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For information about using SIRPIPE and SIRPUT,&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;For information about using SIRPIPE and SIRPUT,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;see [[&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;#&lt;/del&gt;Loading with the SIRPIPE and SIRPUT utilities|Loading with the SIRPIPE and SIRPUT utilities]].&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;see [[Loading with the SIRPIPE and SIRPUT utilities|Loading with the SIRPIPE and SIRPUT utilities]].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/ol&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/ol&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;   &lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>ELowell</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;diff=72182&amp;oldid=prev</id>
		<title>JAL at 23:56, 10 October 2014</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;diff=72182&amp;oldid=prev"/>
		<updated>2014-10-10T23:56:28Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;a href=&quot;https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;amp;diff=72182&amp;amp;oldid=48890&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>JAL</name></author>
	</entry>
	<entry>
		<id>https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;diff=48890&amp;oldid=prev</id>
		<title>JAL2: Created page with &quot;  Using &lt;var class=&quot;product&quot;&gt;Janus Web Server&lt;/var&gt; it is possible to create complete web applications using only the &lt;var class=&quot;product&quot;&gt;Model 204&lt;/var&gt; editor. With the &lt;var c...&quot;</title>
		<link rel="alternate" type="text/html" href="https://m204wiki.rocketsoftware.com/index.php?title=Uploading_files_to_a_Janus_Web_Server&amp;diff=48890&amp;oldid=prev"/>
		<updated>2011-10-25T00:30:30Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;  Using &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; it is possible to create complete web applications using only the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; editor. With the &amp;lt;var c...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt; &lt;br /&gt;
Using &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; it is possible to create complete web applications&lt;br /&gt;
using only the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; editor.&lt;br /&gt;
With the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; editor, it is possible&lt;br /&gt;
to create static HTML pages and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; procedures that&lt;br /&gt;
dynamically generate HTML and that accept input from HTML forms.&lt;br /&gt;
 &lt;br /&gt;
There might be a need, however, to include binary data&lt;br /&gt;
generated outside of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; in an application.&lt;br /&gt;
This data&lt;br /&gt;
can include graphical images, audio data, java applets and&lt;br /&gt;
many other workstation generated binary datatypes.&lt;br /&gt;
Furthermore,&lt;br /&gt;
it might be desirable to generate static HTML pages using&lt;br /&gt;
an HTML editor, some other workstation based editor or even&lt;br /&gt;
a mainframe editor outside of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&lt;br /&gt;
All these cases raise&lt;br /&gt;
the issue of how the data generated outside of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; can be&lt;br /&gt;
loaded into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; procedures.&lt;br /&gt;
 &lt;br /&gt;
Since &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; procedures are generally expected to contain text data,&lt;br /&gt;
there is also an issue of how binary, non-text data&lt;br /&gt;
can be stored in a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; procedure.&lt;br /&gt;
This problem&lt;br /&gt;
is solved by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; with the use of special format procedures&lt;br /&gt;
that allow the storing of data as either binary or base64 encoded&lt;br /&gt;
data.&lt;br /&gt;
To keep these procedures from causing problems in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;,&lt;br /&gt;
the data is &amp;quot;wrapped&amp;quot; with some character data that is&lt;br /&gt;
stripped by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; when the data is downloaded as part of a&lt;br /&gt;
web request.&lt;br /&gt;
More information on producing these special&lt;br /&gt;
format procedures is available in [[#Loading with the SIRPIPE and SIRPUT Utilities|&amp;quot;Loading with the SIRPIPE and SIRPUT Utilities&amp;quot;]],&lt;br /&gt;
[[#HTTP PUT support|&amp;quot;HTTP PUT support&amp;quot;]], and [[#Form-based uploads|&amp;quot;Form-based uploads&amp;quot;]].&lt;br /&gt;
 &lt;br /&gt;
Historically, two mechanisms were mainly used&lt;br /&gt;
for moving data from outside of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; into procedures:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Placing data into a BATCH2 (or BATCH204)&lt;br /&gt;
stream between a &amp;lt;var&amp;gt;PROCEDURE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;END PROCEDURE&amp;lt;/var&amp;gt; statement.&lt;br /&gt;
&amp;lt;li&amp;gt;Using &amp;lt;var&amp;gt;READ IMAGE&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;$BLDPROC&amp;lt;/var&amp;gt; to create&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; procedures.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
The latter mechanism can be quite&lt;br /&gt;
cumbersome, so it is not discussed further.&lt;br /&gt;
The former mechanism has some problems uploading binary&lt;br /&gt;
or text data that has long records (lines), which are often&lt;br /&gt;
created by HTML-generating packages.&lt;br /&gt;
 &lt;br /&gt;
The SIRPIPE and SIRPUT utilities were designed for loading&lt;br /&gt;
binary and text data into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&lt;br /&gt;
SIRPIPE uses BATCH2 or BATCH204 to load the data,&lt;br /&gt;
while SIRPUT uses HTTP PUT.&lt;br /&gt;
With these utilities, moving data&lt;br /&gt;
from a workstation to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; is a two-step process:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A file&lt;br /&gt;
upload program moves the data from a workstation to an operating system file.&lt;br /&gt;
 &lt;br /&gt;
Since any site using &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; will have a TCP/IP&lt;br /&gt;
package on the host mainframe, FTP is probably the best of the many&lt;br /&gt;
ways to transfer files from a workstation&lt;br /&gt;
to a mainframe (FTP, IND$, 3270 emulator uploads, PCTRANS,&lt;br /&gt;
Kermit, etc.).&lt;br /&gt;
&amp;lt;li&amp;gt;SIRPIPE or SIRPUT moves the data from the operating system file&lt;br /&gt;
into &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
For information about using SIRPIPE and SIRPUT,&lt;br /&gt;
see [[#Loading with the SIRPIPE and SIRPUT utilities|&amp;quot;Loading with the SIRPIPE and SIRPUT utilities&amp;quot;]].&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
While an FTP plus SIRPIPE or SIRPUT, batch-based, transfer mechanism&lt;br /&gt;
is very flexible, it generally requires that any&lt;br /&gt;
transfer be initiated from the mainframe.&lt;br /&gt;
This might&lt;br /&gt;
not be a good solution at sites where it is desirable to&lt;br /&gt;
allow programmers, web designers, and end-users to upload&lt;br /&gt;
data directly from their workstations.&lt;br /&gt;
 &lt;br /&gt;
To service workstation-initiated file transfers,&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; provides HTTP PUT support and&lt;br /&gt;
&amp;quot;form-based file upload&amp;quot; support, as described in the following sections.&lt;br /&gt;
An additional alternative, comparable or superior to these methods,&lt;br /&gt;
is the [[Janus FTP Server]], which lets you upload and download&lt;br /&gt;
directly to and from &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; procedure files.&lt;br /&gt;
Not a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; feature,&lt;br /&gt;
the Janus FTP Server requires that you&lt;br /&gt;
be licensed for &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Janus Sockets]]&amp;lt;/var&amp;gt; and &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Janus TCP/IP Base]]&amp;lt;/var&amp;gt;&lt;br /&gt;
and be running the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;[[Sirius Mods]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==HTTP PUT support==&lt;br /&gt;
HTTP PUT support&lt;br /&gt;
adds Web Server handling of the &amp;#039;&amp;#039;&amp;#039;PUT&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
method, which calls for&lt;br /&gt;
an upload to the server of the data in the request.&lt;br /&gt;
With PUT support, you can use &amp;lt;var&amp;gt;[[JANUS WEB ON]]&amp;lt;/var&amp;gt; rules to control&lt;br /&gt;
the uploading of files to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;,&lt;br /&gt;
as described in [[Defining Web rules|&amp;quot;Defining Web rules&amp;quot;]].&lt;br /&gt;
You can programmatically control HTTP PUT file uploads&lt;br /&gt;
with &amp;lt;var&amp;gt;JANUS WEB ON&amp;lt;/var&amp;gt; rules and the &amp;lt;var&amp;gt;[[$Web_Proc_Receive]]&amp;lt;/var&amp;gt;&lt;br /&gt;
and &amp;lt;var&amp;gt;[[$Web_List_Receive]]&amp;lt;/var&amp;gt; functions.&lt;br /&gt;
 &lt;br /&gt;
Since the PUT method is part of the HTTP 1.1 standard, it is&lt;br /&gt;
expected that most vendors of HTML editors and perhaps&lt;br /&gt;
browsers will ultimately support this method.&lt;br /&gt;
As of this writing, HTTP PUT is supported on most web servers&lt;br /&gt;
and by Perl, PHP, Python and the other popular web development&lt;br /&gt;
languages. but is not widely accessible on web clients.&lt;br /&gt;
 &lt;br /&gt;
==Form-based uploads==&lt;br /&gt;
An alternative approach to uploading files to&lt;br /&gt;
a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; is form-based uploads.&lt;br /&gt;
Form-based uploads&lt;br /&gt;
work in conjunction with HTML forms.&lt;br /&gt;
An HTML form&lt;br /&gt;
can have in input field with a type of &amp;quot;file.&amp;quot;&lt;br /&gt;
The content of such a field&lt;br /&gt;
is the name of a file (including&lt;br /&gt;
disk and path information), and when the form&lt;br /&gt;
is submitted, the contents of the named file,&lt;br /&gt;
as well as the name of the file, are sent to the web server.&lt;br /&gt;
 &lt;br /&gt;
The following is an example of HTML that generates&lt;br /&gt;
a form that allows the&lt;br /&gt;
upload of a single file that defaults to a file&lt;br /&gt;
called &amp;lt;code&amp;gt;capture.dat&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;&amp;lt;form method=POST enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;input type=FILE name=indata value=&amp;quot;C:/upload/capture.dat&amp;quot;&amp;gt;&lt;br /&gt;
&amp;amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=SUBMIT value=&amp;quot;Upload file&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Note especially the &amp;lt;code&amp;gt;enctype&amp;lt;/code&amp;gt; attribute in the &amp;lt;code&amp;gt;form&amp;lt;/code&amp;gt;&lt;br /&gt;
tag.&lt;br /&gt;
This is required because the default form encoding,&lt;br /&gt;
&amp;lt;code&amp;gt;application/x-www-form-urlencoded&amp;lt;/code&amp;gt;, does not allow&lt;br /&gt;
file uploads.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; automatically handles the different encoding mechanisms&lt;br /&gt;
for form data, so other than specifying the appropriate&lt;br /&gt;
&amp;lt;code&amp;gt;enctype&amp;lt;/code&amp;gt; when form-based file uploads are to be used,&lt;br /&gt;
an application programmer need not be concerned about the&lt;br /&gt;
encoding mechanism.&lt;br /&gt;
An &amp;lt;code&amp;gt;enctype&amp;lt;/code&amp;gt; of&lt;br /&gt;
&amp;lt;code&amp;gt;multipart/form-data&amp;lt;/code&amp;gt; can be used even if no&lt;br /&gt;
&amp;lt;code&amp;gt;type=file&amp;lt;/code&amp;gt; input fields are present in the form,&lt;br /&gt;
but this is a slightly less efficient way of representing&lt;br /&gt;
a form than the default encoding mechanism of&lt;br /&gt;
&amp;lt;code&amp;gt;application/x-www-form-urlencoded&amp;lt;/code&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
The form encoding mechanism can be&lt;br /&gt;
queried with the &amp;lt;var&amp;gt;[[$Web_Hdr_Parm]]&amp;lt;/var&amp;gt; function, as in the following:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;If $web_hdr_parm(&amp;#039;content-type&amp;#039;) Ne &amp;#039;MULTIPART/FORM-DATA&amp;#039; Then&lt;br /&gt;
   %rc = $web_done(400, &amp;#039;Invalid upload type&amp;#039;)&lt;br /&gt;
   Stop&lt;br /&gt;
End if&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Since form-based file uploads are part of both the HTTP and HTML standards,&lt;br /&gt;
it is quite likely that most browsers already support this mechanism.&lt;br /&gt;
 &lt;br /&gt;
A limitation of this&lt;br /&gt;
technology is that some implementations of the&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;input type=file&amp;gt;&amp;lt;/code&amp;gt; tag by &amp;#039;&amp;#039;Internet Explorer&amp;#039;&amp;#039;&lt;br /&gt;
essentially ignored the default value (file name).&lt;br /&gt;
This might&lt;br /&gt;
be viewed as a security feature since it prevents a&lt;br /&gt;
malicious server from presenting a user with a form&lt;br /&gt;
with a file upload buried in the middle that uploads&lt;br /&gt;
a secure file from the browser&amp;#039;s machine.&lt;br /&gt;
If the user&lt;br /&gt;
doesn&amp;#039;t notice that this is being done on the form,&lt;br /&gt;
the secure file could be blindly uploaded to the&lt;br /&gt;
malicious server.&lt;br /&gt;
In theory, this security hole could be dealt with by displaying a pop-up window&lt;br /&gt;
that warns the user which file is being uploaded and gives&lt;br /&gt;
the user a chance to cancel the request.&lt;br /&gt;
It is not currently known if&lt;br /&gt;
this type of warning system has been or will be implemented&lt;br /&gt;
in &amp;#039;&amp;#039;Internet Explorer&amp;#039;&amp;#039; or other browsers.&lt;br /&gt;
A form-based upload might always bear&lt;br /&gt;
the inconvenience of forcing the end-user to pick out&lt;br /&gt;
the uploaded file at each invocation.&lt;br /&gt;
 &lt;br /&gt;
Another weakness of form-based uploads is that each&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;lt;input type=file&amp;gt;&amp;lt;/code&amp;gt; tag can only be associated&lt;br /&gt;
with a single file.&lt;br /&gt;
There is no easy way to upload the entire contents of (or several files in) a directory.&lt;br /&gt;
While multiple &amp;lt;code&amp;gt;&amp;lt;input type=file&amp;gt;&amp;lt;/code&amp;gt; tags can be&lt;br /&gt;
present in a form so that multiple files can be uploaded&lt;br /&gt;
with a single request, each file must be individually&lt;br /&gt;
selected by the end-user.&lt;br /&gt;
 &lt;br /&gt;
A final weakness of the form-based file upload approach&lt;br /&gt;
is that since it is part of a form, it must be processed&lt;br /&gt;
by &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; and cannot be processed with simple&lt;br /&gt;
&amp;lt;var&amp;gt;JANUS WEB ON ... RECEIVE&amp;lt;/var&amp;gt; rules.&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; can process files being uploaded as part&lt;br /&gt;
of a form-based upload with some special purpose $functions,&lt;br /&gt;
which are described in &amp;lt;var&amp;gt;[[$Web_Proc_Receive]]&amp;lt;/var&amp;gt; and &amp;lt;var&amp;gt;[[$Web_List_Receive]]&amp;lt;/var&amp;gt;.&lt;br /&gt;
 &lt;br /&gt;
Despite these weaknesses, form-based file uploads&lt;br /&gt;
present the simpler option for allowing untrained end users&lt;br /&gt;
to upload files to a web server as part of an integrated&lt;br /&gt;
web application, especially when the upload consists of&lt;br /&gt;
only a very few files.&lt;br /&gt;
For relatively frequent uploads of, say, more than five files,&lt;br /&gt;
the option of choice is the Janus FTP server.&lt;br /&gt;
 &lt;br /&gt;
==Janus FTP Server==&lt;br /&gt;
Another option for uploading files to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, for use on the&lt;br /&gt;
web (or for any other use), is the FTP feature of &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Sockets&amp;lt;/var&amp;gt;.&lt;br /&gt;
The Janus FTP Server lets you use&lt;br /&gt;
any standard FTP client to upload one or a set of files in&lt;br /&gt;
a directory to a &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; file, storing the uploaded&lt;br /&gt;
files as &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; procedures.&lt;br /&gt;
 &lt;br /&gt;
To implement the FTP feature, you use &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; to define the following,&lt;br /&gt;
the details for which are provided in [[Janus FTP Server|&amp;quot;Janus FTP Server&amp;quot;]]:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;A &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Sockets&amp;lt;/var&amp;gt; port with the special type &amp;lt;var&amp;gt;[[JANUS DEFINE#type|FTPSERVER]]&amp;lt;/var&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Web server rules specific to the upload location&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
The following sample definition deck creates and starts a Janus FTP&lt;br /&gt;
Server port called &amp;lt;code&amp;gt;MYFTP&amp;lt;/code&amp;gt;:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;JANUS FORCE MYFTP&lt;br /&gt;
JANUS DELETE MYFTP&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;#42; FTP server on port 3205&lt;br /&gt;
JANUS DEFINE MYFTP  3205 FTPSERVER 4 CLIENTSOCKET FTPDCLIENT -&lt;br /&gt;
      AUDTERM PASVPORT 3001 BINDADDR 198.242.244.100&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;#42; Client port definition for active transfers&lt;br /&gt;
JANUS DEFINE FTPDCLIENT * CLSOCK 5 REMOTE SOCKPMAX 5&lt;br /&gt;
JANUS CLSOCK FTPDCLIENT ALLOW&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;#42; FTP access to MYPROC&lt;br /&gt;
JANUS FTP MYFTP ASSIGN /MY TO FILE MYPROC&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;#42; Permissions&lt;br /&gt;
JANUS FTP MYFTP ALLOW /MY WRITE TO USER CARTMAN&lt;br /&gt;
 &lt;br /&gt;
&amp;amp;#42; Set the home folder&lt;br /&gt;
JANUS FTP MYFTP HOME /MY TO ALL&lt;br /&gt;
 &lt;br /&gt;
JANUS START MYFTP&lt;br /&gt;
JANUS START FTPDCLIENT&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
In this example:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;code&amp;gt;MYFTP&amp;lt;/code&amp;gt; port defined above runs on port 3205 on machine 198.242.244.100.&lt;br /&gt;
The port definition includes a specification (&amp;lt;code&amp;gt;PASVPORT&amp;lt;/code&amp;gt;) to support&lt;br /&gt;
passive FTP transfers for clients that require that mode.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;code&amp;gt;FTPDCLIENT&amp;lt;/code&amp;gt; port is defined to support active FTP transfers&lt;br /&gt;
for clients that require that mode.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;lt;var&amp;gt;[[JANUS FTP#JANUS FTP ASSIGN|JANUS FTP ASSIGN]]&amp;lt;/var&amp;gt; command maps the directory orientation&lt;br /&gt;
seen by an FTP client onto the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; file and procedure structure&lt;br /&gt;
that actually exists in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;.&lt;br /&gt;
In this example, the &amp;lt;var&amp;gt;FTP ASSIGN&amp;lt;/var&amp;gt; command maps&lt;br /&gt;
the folder &amp;lt;code&amp;gt;/MY&amp;lt;/code&amp;gt; to the file &amp;lt;code&amp;gt;MYPROC&amp;lt;/code&amp;gt;.&lt;br /&gt;
Any file&lt;br /&gt;
uploaded to the &amp;lt;code&amp;gt;/MY&amp;lt;/code&amp;gt; directory becomes a procedure in file &amp;lt;code&amp;gt;MYPROC&amp;lt;/code&amp;gt;.&lt;br /&gt;
&amp;lt;li&amp;gt;The user &amp;lt;code&amp;gt;CARTMAN&amp;lt;/code&amp;gt; is the only user&lt;br /&gt;
allowed to upload to the port, as defined by the &amp;lt;var&amp;gt;[[JANUS FTP#JANUS FTP ALLOW|JANUS FTP ALLOW]]&amp;lt;/var&amp;gt; command.&lt;br /&gt;
&amp;lt;li&amp;gt;The &amp;quot;home folder&amp;quot; &amp;lt;code&amp;gt;/MY&amp;lt;/code&amp;gt;, defined by the &amp;lt;var&amp;gt;[[JANUS FTP#JANUS FTP HOME|JANUS FTP HOME]]&amp;lt;/var&amp;gt; command&lt;br /&gt;
is the folder into which the user is automatically placed when they&lt;br /&gt;
connect to the port.&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Once these &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; statements are executed in the &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt; online, client FTP users anywhere can connect to the Janus server port and execute PUTs or their GUI equivalents for the files they want to upload.&lt;br /&gt;
FTP clients will need both the host ID (198.242.244.100)&lt;br /&gt;
and port (3205) of the FTP server to connect.&lt;br /&gt;
Command line clients, for example, might use:&lt;br /&gt;
&amp;lt;p class=&amp;quot;code&amp;quot;&amp;gt;open 198.242.244.100 3205&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Users can upload files containing binary or text information.&lt;br /&gt;
The FTP Server correctly handles the type of upload&lt;br /&gt;
that the client FTP package indicates.&lt;br /&gt;
By default, the server assumes type &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;&lt;br /&gt;
(ASCII, with translation to EBCDIC) until notified otherwise.&lt;br /&gt;
 &lt;br /&gt;
Users can upload multiple files at a time,&lt;br /&gt;
executing MPUTs with a command-line client or taking GUI-equivalent measures.&lt;br /&gt;
And users can upload entire directories and subdirectories (if and only if&lt;br /&gt;
a matching directory structure is predefined for the server).&lt;br /&gt;
The dynamic creation of directories (FTP protocol MKD command)&lt;br /&gt;
is not currently supported by Janus FTP.&lt;br /&gt;
 &lt;br /&gt;
For uploading individual files or sets of files, Janus FTP is a fast and&lt;br /&gt;
convenient utility, suitable for any type of user.&lt;br /&gt;
 &lt;br /&gt;
==How uploads work with Janus Web Server==&lt;br /&gt;
Whether HTTP PUT or form-based upload is being used,&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; copies the file being uploaded into CCATEMP.&lt;br /&gt;
This way, if a network or browser problem prevents&lt;br /&gt;
the entire file from being transferred, the request can&lt;br /&gt;
simply be discarded without a risk of leaving partial&lt;br /&gt;
data in a procedure.&lt;br /&gt;
 &lt;br /&gt;
Once all the data from a request has been received into&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;, the web rules are scanned to determine the appropriate&lt;br /&gt;
action.&lt;br /&gt;
If the upload was the result of an HTTP PUT,&lt;br /&gt;
and the appropriate action (&amp;quot;RECEIVE&amp;quot;) is indicated&lt;br /&gt;
in a &amp;lt;var&amp;gt;JANUS WEB ON&amp;lt;/var&amp;gt; rule, the file is simply copied into&lt;br /&gt;
the target procedure, perhaps being converted to the&lt;br /&gt;
special &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; binary or base64 formats if the input&lt;br /&gt;
file consists of binary non-text data.&lt;br /&gt;
 &lt;br /&gt;
If the &amp;lt;var&amp;gt;JANUS WEB ON&amp;lt;/var&amp;gt; rule associated with the upload request indicates&lt;br /&gt;
that a command should be executed,&lt;br /&gt;
or if the request is a form-based upload,&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; $functions&lt;br /&gt;
(&amp;lt;var&amp;gt;[[$Web_Proc_Receive]]&amp;lt;/var&amp;gt;, &amp;lt;var&amp;gt;[[$Web_List_Receive]]&amp;lt;/var&amp;gt;)&lt;br /&gt;
can be used to upload the file(s) into a procedure or&lt;br /&gt;
into a [[$lists|$list]].&lt;br /&gt;
 &lt;br /&gt;
When a procedure is being updated either as the result&lt;br /&gt;
of a &amp;lt;var&amp;gt;JANUS WEB ON&amp;lt;/var&amp;gt; rule or a &amp;lt;var&amp;gt;[[$Web_Proc_Receive]]&amp;lt;/var&amp;gt; function,&lt;br /&gt;
&amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; attempts to&lt;br /&gt;
get an exclusive lock on the procedure before doing the update.&lt;br /&gt;
If it is unable to obtain an exclusive procedure lock, the request fails.&lt;br /&gt;
The exclusive lock is only held while data is copied&lt;br /&gt;
from CCATEMP to the procedure.&lt;br /&gt;
This means two things:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Once the copy operation is started, it will complete&lt;br /&gt;
regardless of the status of the connection with a browser.&lt;br /&gt;
Put another way, there is no danger of an HTTP PUT or&lt;br /&gt;
form-based upload leaving around a partial procedure.&lt;br /&gt;
&amp;lt;li&amp;gt;The exclusive lock on a procedure is generally&lt;br /&gt;
held very briefly (typically a few milliseconds),&lt;br /&gt;
so it is not likely to disrupt download operations for&lt;br /&gt;
the same procedures.&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Note:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Although the preceding discussion concerns &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt; handling&lt;br /&gt;
of HTTP PUT and form-based uploads, the Janus FTP Server&lt;br /&gt;
handling of uploaded files uses CCATEMP and locking in the same way&lt;br /&gt;
to safeguard your procedures.&lt;br /&gt;
 &lt;br /&gt;
==Choosing the correct upload method==&lt;br /&gt;
There are many options for doing file upload to &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;&lt;br /&gt;
with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Web Server&amp;lt;/var&amp;gt;.&lt;br /&gt;
None of them is perfect and each has its&lt;br /&gt;
advantages.&lt;br /&gt;
The following table summarizes&lt;br /&gt;
the advantages and disadvantages of each technique&lt;br /&gt;
to help determine the correct technique for&lt;br /&gt;
any application.&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;FTP and SIRPIPE|SIRPUT&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Advantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Easy to configure and automate. Can be initiated from mainframe. Not dependent on any browsers. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Disadvantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Cannot be initiated from a workstation. BATCH2 is extremely slow, so SIRPUT is preferred to SIRPIPE. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Likely users &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;System administrators, operators (running canned procedures), and mainframe-oriented developers. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;HTTP PUT&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Advantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt; Can upload entire directories. Can be initiated from a workstation. Can be set up without programming in &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Model 204&amp;lt;/var&amp;gt;. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Disadvantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Not widely supported beyond &amp;#039;&amp;#039;Netscape Composer&amp;#039;&amp;#039;. Can&amp;#039;t be integrated into web application. Some training required. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Likely users &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Web developers and designers. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Form-based upload&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Advantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt; Can be integrated into web applications. Little or no training required. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Disadvantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;No way to upload directories or groups of files. Some &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; programming is required to set it up. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Likely users &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;End-users. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Janus FTP Server&lt;br /&gt;
&amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Advantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Fast transfers, including both uploads and downloads. Can be initiated from a workstation. Easy-to-use interface. Can upload multiple files and directories. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Disadvantages &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Can&amp;#039;t be integrated into web application. Must be set up with &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;User Language&amp;lt;/var&amp;gt; programming. Might need to acquire an FTP client tool. Requires &amp;lt;var class=&amp;quot;product&amp;quot;&amp;gt;Janus Sockets&amp;lt;/var&amp;gt;. Can&amp;#039;t dynamically create subdirectories. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;th&amp;gt;Likely users &amp;lt;/th&amp;gt;&amp;lt;td&amp;gt;Web developers, designers, and end users. &amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Janus Web Server]]&lt;/div&gt;</summary>
		<author><name>JAL2</name></author>
	</entry>
</feed>