1

我的网络客户端基于 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;
        }
4

1 回答 1

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,...)并让用户解压缩它。或适用于所有浏览器的某种浏览器扩展。

于 2013-07-06T20:25:10.703 回答