• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 783
  • Last Modified:

File Download Dialogue box

Hi!
I have a generic download page which all my download links will point to.
It will take in some paremeters to do some checking but that is not the problem.

I need to do a "File Download" dialogue box which will allow the user to either save or open.

What i am encountering is...
If i upload a 2MB file, if i chose to save or open in the file download dialogue box, the file will be corrupted.
If i choose to save the file down, it will NOT be 2MB but maybe 1.6MB.

Any advice?
SPWeb web = SPContext.Current.Web;
web.AllowUnsafeUpdates = true;
string contentType = "";
 
string url = http://mydomain.com/libraryname/foldername/document.doc
 
            SPFile tempFile = web.GetFile(url);
 
            byte[] obj = (byte[])tempFile.OpenBinary();
 
            switch (casestring)
            {
 
                case "txt":
 
                    contentType = "text/plain";
 
                    break;
 
                case "htm": contentType = "text/html";
 
                    break;
 
                case "html": contentType = "text/html";
 
                    break;
 
                case "rtf": contentType = "text/richtext";
 
                    break;
 
                case "jpg": contentType = "image/jpeg";
 
                    break;
 
                case "jpeg": contentType = "image/jpeg";
 
                    break;
 
                case "gif": contentType = "image/gif";
 
                    break;
 
                case "bmp": contentType = "image/bmp";
 
                    break;
 
                case "mpg": contentType = "video/mpeg";
 
                    break;
 
                case "mpeg": contentType = "video/mpeg";
 
                    break;
 
                case "avi": contentType = "video/avi";
 
                    break;
 
                case "pdf": contentType = "application/pdf";
 
                    break;
 
                case "doc": contentType = "application/msword";
 
                    break;
 
                case "dot": contentType = "application/msword";
 
                    break;
 
                case "csv": contentType = "application/vnd.msexcel";
 
                    break;
 
                case ".xls": contentType = "application/vnd.msexcel";
 
                    break;
 
                case ".xlt": contentType = "application/vnd.msexcel";
 
                    break;
 
                default: contentType = "application/octet-stream";
 
                    break;
 
            }
 
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ClearHeaders();
            HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment; filename= " + DocName);
            HttpContext.Current.Response.ContentType = contentType;
 
            //Check that the client is connected and has not closed the connection after the request
 
            if (HttpContext.Current.Response.IsClientConnected)
                HttpContext.Current.Response.BinaryWrite(obj);
 
            HttpContext.Current.Response.Flush();
            HttpContext.Current.Response.Close();

Open in new window

0
darenceang
Asked:
darenceang
  • 2
  • 2
1 Solution
 
GreatGermCommented:
I guess I'm curious as to why you aren't using the OOB document library interface?
0
 
darenceangAuthor Commented:
Hi GreatGerm!

What u mean by OOB document library interface?
Sorry... noob
:(
0
 
GreatGermCommented:
SharePoint has a decent interface in its document library list type that handles what you're wanting to do.  You can either just use it in the list or use their script to handle it at runtime.  You can see how it's setup by looking at any document library, but I have also included the page code that it uses.
 
<TR class="ms-alternating">
	<TD Class="ms-vb-icon">
		<A TABINDEX=-1 HREF="/sites/sitename/doclibrary/fileName.aspx" onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','','0','SharePoint.OpenDocuments','SharePoint.WebPartPage.Document','1','','324','0','0','0x7fffffffffffffff')">
			<IMG BORDER=0 ALT="fileName.aspx" title="fileName.aspx" SRC="/_layouts/images/icsmrtpg.gif">
		</A>
	</TD>
	<TD Class="ms-vb-title" height="100%">
		<table height="100%" cellspacing=0 class="ms-unselectedtitle" onmouseover="OnItem(this)" CTXName="ctx1" Id="5" Url="/sites/sitename/doclibrary/fileName.aspx" DRef="sites/sitename/doclibrary" Perm="0x7fffffffffffffff" Type="SharePoint.WebPartPage.Document" Ext="aspx" Icon="icsmrtpg.gif|Microsoft Office SharePoint Designer|SharePoint.OpenDocuments" OType="0" COUId="" SRed="1" COut="0" HCD="" CSrc="" MS="0" CType="Document" CId="0x010100626BBFC9A12B5D40966CF75650AD5A0E" UIS="512" SUrl="">
			<tr>
				<td width="100%" Class="ms-vb">
					<A onfocus="OnLink(this)" HREF="/sites/sitename/doclibrary/fileName.aspx" onclick="return DispEx(this,event,'TRUE','FALSE','FALSE','','0','SharePoint.OpenDocuments','SharePoint.WebPartPage.Document','1','','324','0','0','0x7fffffffffffffff')">
						fileName
						<img src="/_layouts/images/blank.gif" class="ms-hidden" border=0 width=1 height=1 alt="Use SHIFT+ENTER to open the menu (new window).">
					</A>
				</td>
				<td>
					<img src="/_layouts/images/blank.gif" width=13 style="visibility:hidden" alt="">
				</td>
			</tr>
		</table>
	</TD>
	<TD Class="ms-vb2">
		<NOBR>12/23/2008 11:03 AM</NOBR>
	</TD>
	<TD Class="ms-vb-user">
		<table cellpadding=0 cellspacing=0 dir="">
			<tr>
				<td style="padding-right: 3px;">
					<a href="javascript:" onclick="IMNImageOnClick();return false;" class="ms-imnlink">
						<img title="" alt="No presence information" name="imnmark" border="0" valign="middle" height="12" width="12" src="/_layouts/images/blank.gif" sip="USER" id="imn2,type=sip" >
					</a>
				</td>
				<td style="padding: 1px 0px 0px 0px;" class="ms-vb">
					<A ONCLICK="GoToLink(this);return false;" HREF="/sites/sitename/_layouts/userdisp.aspx?ID=1">
						USER
					</A>
				</td>
			</tr>
		</table>
	</TD>
</TR>

Open in new window

0
 
darenceangAuthor Commented:
Solved!
The change is Response.End instead of Response.close

This will allow the buffer to finish what it does before closing.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

  • 2
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now