通过Internet Explorer向用户提供多个文件的正确方法

时间:2013-07-06 16:44:54

标签: asp.net c#-4.0 asp.net-web-api download ext.net

我的网络客户端基于EXT.net网格 我的服务器是基于ASP.NET web api构建的 我的用户使用Internet Explorer(chrome,Firefox)访问我的应用程序 我想尝试在一次迭代中点击用户多个文件(pdf)(点击) 我可以在web api控制器中配置我的方法来提供多个文件吗? 我可以一次从客户端进行多次调用,因此chrome或firefox会回放多个文件吗?

哪一个更好。

以下是我如何进行一次文件下载

客户方:

<ext:Button ID="test"  Icon="Door" Text="daj mi narudzbu"   runat="server">
   <DirectEvents>
        <Click  
             IsUpload="true"
             FormID="fileform"
             AutoDataBind="true"
             CleanRequest="true" 
             Method="POST"
             Url="http://localhost:44861/desktopmodules/TkmWebApi/api/reportNarudzba/report"
            >
       </Click>
   </DirectEvents>
</ext:Button>

服务器端:

[AllowAnonymous]
        [HttpPost]
        public HttpResponseMessage report()
        {
           HttpResponseMessage response = new HttpResponseMessage();
                    MemoryStream memoryStream = new MemoryStream();
                    memoryStream.Write(bytes, 0, bytes.Length);
                    response.Content = new ByteArrayContent(memoryStream.ToArray());
                    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
                    response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "narudzba.pdf" };
                    response.StatusCode = HttpStatusCode.OK;
                    return response;
        }

1 个答案:

答案 0 :(得分:3)

服务器不能简单地提供多个文件。如果文件是图像,您可以将它们嵌入到页面中。使用.pdf,您需要为用户提供多个链接以下载文件或使用JavaScript打开多个窗口。有点像:

Response.Write("<script>");
Response.Write("window.open('pdfurl1');");
Response.Write("window.open('pdfurl2');");
...
Response.Write("</script>");

其中pdfurl1,pdfurl2是服务器页面的地址,其中包含用于传递file1,file2,....的参数。
用户必须确认每个文件的下载,弹出窗口阻止程序激活时会出现问题。

如果您正在使用会话,请注意只有一个进程可以访问会话,因此用户无法同时下载文件,但如果文件很小,用户可能不会注意到它。

其他方法是创建一个文件(Zip,tar,...)并让用户解压缩它。或者适用于所有浏览器的某种浏览器扩展。