<html>
<head>
<title>Managing project files and documents</title>

<meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
</head>
<body>


    <span class="Header">Managing project files</span>

<p><span class="PlainText"><b>Project help for project owner administration: Index</b>
<ul>
<dl>
  <dt><a href="ProjectOwnerAdmin.html">Project Owner Administration</a>
	<dd><a href="ProjectOwnerEdit.html">Editing and maintaining the Project Home page</a>
  	<dd><a href="ProjectOwnerNews.html">Managing project site news</a>  
  	<dd><b>You are here: Managing project files
			<ul>
			<li><a href="#downloading">Downloading project files</a>
			<li><a href="#adding">Uploading project files</a>
		    <li><a href="#files" target="Files">About file types</a>
		</ul></b>
	<dd><a href="ProjectOwnerMembers.html">Adding project members and approving roles</a>
	<dd><a href="ProjectOwnerMailingLists.html">Managing project mailing lists</a>
	<dd><a href="ProjectOwnerDocumentation.html">Managing project documentation</a>
	<dd><a href="ProjectOwnerSource.html">Managing project source code with CVS version control</a>
	<dd><a href="ProjectOwnerIssues.html">Tracking and managing project issues</a>
  <dt><a href="/servlets/HelpTOC">Back to main Help index</a>
</dl>
</ul>
<p>
<hr noshade size=1>

<span class=inputheader>Managing project files</span> 
<p>This section focuses on uploading, or posting, files and documents on your project site for later downloading. We will first explain the page features and then, in the section titled "<a href="#files">About file types</a>" suggest some tips for project owners on how to place and maintain files for maximum ease of use by your developer community. 

<p>As project owner, the columns you see when you access this page will differ from those seen by other users who are not project owners, and you will see the following column headings:
<ul>
<li>Size</li>  
<li>File Name</li>  
<li>Date Posted</li>  
<li>Posted By </li> 
<li>MD5 Checksum</li> 
</ul>


<p>These headings for the columns are fairly self-explanatory. The "Size" heading relates to the size of the file, and the "File Name" to the file name. "Date Posted," and "Posted By" refer to the date on which the file was placed on the project site and who posted it there. 
<p>"MD5 Checksum" refers to a commonly accepted protocol for verifying a file's integrity. The numbers uniquely identify a file, and are automatically generated by the page every time a file is uploaded to the page. Upon downloading a file, you can verify the integrity and authenticity of the file by checking the numbers you generate using the protocol's algorithm against those on the site. MD5 checksum thus safeguards against any form of corruption (including the malicious insertion of viruses or Trojan horses) encountered while downloading.
<p>
Generating the MD5 code generally requires that use an operating system based on Unix, such as Linux, though there are increasingly more implementations available. But for now, unless you are using Linux, you will not be able to fully use the MD5 checksum functionality of the site. (For more information about MD5, please see Lance Spitzner's useful account of MD5, "<a href="http://www.enteract.com/~lspitz/md5.html" "target=_new">What is MD5 and why do I care?</a>"
<p>

<hr noshade size=1>
<a name="downloading"><span class="InputHeader">How do I download a file?</span>
<p>Under each heading, there may be files that you can download by clicking on them. If your browser supports file downloads, the download will immediately commence. The file will be downloaded to your default download directory on your workstation. 
<p>

<hr noshade size=1>
<p><a name="adding"></a><span class="InputHeader">How do I upload a file? (Adding or replacing a download)</span>
<p>You can add to and replace files already on the page by using the "Add or Replace a Download" field. To select a file you want added to the page, click on the "Browse..." button.  This button works with all browsers that support file uploads, regardless of the underlying operating system.  If you are using Windows, and you do not see the file you wish to upload, try setting the "Files of type:" setting to "All Files" in your browser's window.
<p>There are a few caveats about uploading files:
<ul>
<li>The upload field does not support spaces in file names. Thus, if you are uploading a file whose name is, for instance, "Java Specifications," you will have to rename it on your computer to something like, "Java_Specifications."</li> 
<p>
<li>The field does not support the addition of directories; and adding many files at once could end up being counterproductive.</li>
<p>
<li>The maximum file size allowed per upload is 25 MB. Larger files will not be accepted.</li>
</ul>
<p>Once you have selected the file, you should describe the file. This description should be short and to the point. The idea is to provide the viewer with enough information to choose whether she needs to download the file or not. For instance, if you want to make available the the project's latest milestone, you might describe it using the date, or if it is a component, the version and function name.

<p>The last field on the page, the "Public" checkbox, allows you to stipulate whether you want the file to be publicly available. Checking the box indicates that anyone who as accessed your downloads page can retrieve the file; they need not be members of your project. In contrast, an empty box denotes that only project <i>members</i> can retrieve the file. By default, the box is left unchecked.  
<p>


<hr noshade size=1>
<a name="files"></a><span class="InputHeader">About file types</span>

<p>You can post a variety of file types for later download:  binaries, tarballs, zip files, text files, even graphic files. Since the point of this page is to provide members (and the public) an central place from which to download final (or major milestone) releases, you do not want to add files which are in flux.  In short, files which require some form of concurrent version control. 
<p>Note: We do not recommend that you post source code to this page. Consequently, this page does not support CVS (Concurrent Versioning Control). If you are interested in posting source and wish to use concurrent version control, please see the <a href="ProjectSource.html">CVS</a> help information.



<hr noshade size=1>
<a href="ProjectOwnerAdmin.html">Back to Project Owner Administration help</a><br>
<a href="/servlets/HelpTOC">Back to main Help index</a>

</span>

</body>
</html>

