protected void LinkButton1_Click(object sender, EventArgs e) { try { FileTransferServiceReference.ITransferService clientDownload = new TransferServiceClient(); FileTransferServiceReference.DownloadRequest requestData = new DownloadRequest(); FileTransferServiceReference.RemoteFileInfo fileInfo = new RemoteFileInfo(); requestData.FileName = "codebase.zip"; fileInfo = clientDownload.DownloadFile(requestData); Response.BufferOutput = false; // to prevent buffering byte[] buffer = new byte[6500]; int bytesRead = 0; HttpContext.Current.Response.Clear(); HttpContext.Current.Response.ClearHeaders(); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + requestData.FileName); bytesRead = fileInfo.FileByteStream.Read(buffer, 0, buffer.Length); while (bytesRead > 0) { // Verify that the client is connected. if (Response.IsClientConnected) { Response.OutputStream.Write(buffer, 0, bytesRead); // Flush the data to the HTML output. Response.Flush(); buffer = new byte[6500]; bytesRead = fileInfo.FileByteStream.Read(buffer, 0, buffer.Length); } else { bytesRead = -1; } } } catch (Exception ex) { // Trap the error, if any. System.Web.HttpContext.Current.Response.Write("Error : " + ex.Message); } finally { Response.Flush(); Response.Close(); Response.End(); System.Web.HttpContext.Current.Response.Close(); } }
private void Download() { String fileName = TextBox_FileName.Text; if (String.IsNullOrWhiteSpace(fileName)) { return; } // 如果文件在服务器上,可以直接使用下面的方法,进行文件下载 // 直接向 HTTP 流输出响应,而不在内存中缓存它 // Response.TransmitFile("file"); try { TransferServiceClient proxy = new TransferServiceClient("basicHttpUpload"); DownloadRequest requestInfo = new DownloadRequest { FilePath = Path.Combine(Server.MapPath("~/TempFiles"), fileName) }; Response.Clear(); Response.ClearHeaders(); Response.ContentType = "application/octet-stream"; Response.AddHeader("Content-Disposition", "attachment; filename=" + FileNameHelper.GetDownloadFileName(fileName)); try { UploadAndDownloadFile fileInfo = proxy.DownloadFile(requestInfo); fileInfo.FileByteStream.CopyTo(Response.OutputStream, 1024 * 100); proxy.Close(); } catch (TimeoutException) { proxy.Abort(); } catch (CommunicationException) { proxy.Abort(); } Response.End(); } catch (Exception ex) { Response.Write("Error : " + ex.Message); } finally { Response.End(); Response.Close(); } }
private void Download(string uploadFolder) { DownloadRequest uploadRequestInfo = new DownloadRequest(); //uploadRequestInfo.FileName = treeView1.SelectedNode.FullPath; uploadRequestInfo.FileName = @"D:\Cursova\Clients\mykhailo\folder2\20140412_221449.mp4"; RemoteFileInfo request = new RemoteFileInfo(); request.Length = service.DownloadFile(ref uploadRequestInfo.FileName, out request.FileName, out request.FileByteStream); FileStream targetStream = null; Stream sourceStream = request.FileByteStream; if (String.IsNullOrEmpty(uploadFolder)) { uploadFolder = @"D:\Cursova\"; } string filePath = Path.Combine(uploadFolder, Path.GetFileName(request.FileName)); using (targetStream = new FileStream(filePath, FileMode.Create, FileAccess.Write, FileShare.None)) { const int bufferLen = 65000; byte[] buffer = new byte[bufferLen]; int count = 0; while ((count = sourceStream.Read(buffer, 0, bufferLen)) > 0) { targetStream.Write(buffer, 0, count); } targetStream.Close(); sourceStream.Close(); } MessageBox.Show("download completed"); }
static void Main(string[] args) { TransferServiceClient proxy = new TransferServiceClient(); Stream stream = new MemoryStream(); string filename = string.Empty; var result = proxy.DownloadFile(ref filename, out stream); using (Stream file = File.Create(filename)) { stream.CopyTo(file); } stream.Dispose(); Console.ReadLine(); }