繁体   English   中英

文件从服务器传输到本地

[英]file transfer from Server to Local

更新:

我使用.net 4.0进行编码,我想找到一个具有特定路径的PDF文件(ViewState [“ MediaFile”]),然后将其传输到本地系统。

这是我的文件传输代码:

        //---server path ---
        String sFilePath = Server.MapPath("~/" + ViewState["MediaFile"].ToString());
        String sFileName= System.IO.Path.GetFileName(sFilePath);
        String RelativePath =sFilePath.Replace(Request.ServerVariables["APPL_PHYSICAL_PATH"], String.Empty);
        HttpContext.Current.Response.ContentType = "APPLICATION/OCTET-STREAM";
        String Header = "Attachment; Filename=" + sFileName;
        HttpContext.Current.Response.AppendHeader("Content-Disposition", Header);
        System.IO.FileInfo Dfile = new System.IO.FileInfo(RelativePath);
        HttpContext.Current.Response.End();

但运行后,出现错误:

由于代码已优化或本机框架位于调用堆栈的顶部,因此无法评估表达式。

当我把HttpContext.Current.ApplicationInstance.CompleteRequest()代替HttpContext.Current.Response.End()时,这不是错误,但是什么也没有! 我的意思是未显示下载面板。

注意:我在另一页上测试此代码,它可以工作。 只是想说因为我表单中的任何代码有可能吗? 我使用Ajax UpdatePanel并禁用右键单击表单。

Response.End()应该足够:)您还应该将Content-Length标头设置为文件大小,以供浏览器计算下载进度。

与使用Response.TransmitFile相比,更好的方法是使用该PDF的文件流将该文件流传输出去并将该数据流分块写入到Response.OutputStream中。

var BlockSize = 4 * 1024 * 1024;
var buffer = new byte[BlockSize];
int bytesRead;
var outStream = Response.OutputStream;
while ((bytesRead = fileStream.Read(buffer, 0, BlockSize)) > 0)
{
    outStream.Write(buffer, 0, bytesRead);
    outStream.Flush();
}

顺便说一句:内容类型实际上与文件扩展名无关。 意味着您不应该使用文件扩展名创建内容类型。

这样尝试

这是mediaUploader是我所有的.pdf文件的文件夹名称。 因此,现在下载pdf文件的代码如下所示。

首先将检查ViewState不为null,然后检查文件是否存在,然后我们下载文件

ViewState["MediaFile"] ="mediaUploader/Visual2.pdf";

 if (ViewState["MediaFile"] != null)
 {
     String sFile = Server.MapPath("~/" + ViewState["MediaFile"].ToString());
     FileInfo file = new FileInfo(sFile);
     if (file.Exists)
     {
         Response.ContentType = "application/pdf";
         Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
         Response.TransmitFile(Server.MapPath("~/" + ViewState["MediaFile"].ToString()));
         Response.End();
     }
 }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM