.NET WEB API 使用 FTP 在新的浏览器选项卡中打开图像文件

Posted

技术标签:

【中文标题】.NET WEB API 使用 FTP 在新的浏览器选项卡中打开图像文件【英文标题】:.NET WEB API Open an image file in to a new browser tab by using FTP 【发布时间】:2019-03-06 07:56:35 【问题描述】:

我有一个使用 FTP 协议从其他站点下载图像的功能。但是现在我想将它打开到一个新标签中,而不是下载它。这是我下载它的 C# 代码。感谢阅读

byte[] byteFTP = ftpclass.ReadFTPFile(results, ConfigCache.HostURL, ConfigCache.UserName, ConfigCache.Password);
if (byteFTP != null)

    HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
    var dataStream = new MemoryStream(byteFTP);
    response.Content = new StreamContent(dataStream);
    response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
    response.Content.Headers.ContentDisposition.FileName = results;
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    response.Content.Headers.ContentLength = dataStream.Length;
    return response;

【问题讨论】:

【参考方案1】:

您不能直接选择从服务器端强制打开新标签页。您当然可以包含一些尝试打开新选项卡1javascript 代码,但有一个问题。你听说过弹窗广告吗?让 JavaScript 随意打开新窗口以响应用户交互在浏览器中越来越受到限制。

因此,您需要在用户执行任何交互时打开该新选项卡(客户端),您的问题中的代码正在运行以响应。那么你的服务器代码就没有任何关系了——你已经给它一个新选项卡来正常传递你的响应(现在可以删除ContentDisposition相关代码——你可能还想提供更具体的内容类型)


1忽略其他问题,您必须让您的回复包含 JavaScript 而不再包含图像。

【讨论】:

【参考方案2】:

要允许在新选项卡中查看文件,您应该将 Content-Disposition 标头设置为 "inline"。但是,根据文件类型,这仍然可以由浏览器决定。内联只是意味着将在返回下载之前尝试显示它

【讨论】:

以上是关于.NET WEB API 使用 FTP 在新的浏览器选项卡中打开图像文件的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 4,Web API - 404 未找到

Web API 2 入门——使用ASP.NET Web API和Angular.js构建单页应用程序(SPA)(谷歌翻译)

ASP.NET Web API 简介

AngularJS UI 路由器 - 在新的浏览器选项卡中使用数据打开状态

在新的 FlutterFire API 中使用 setData 和 merge: true

Web API系列教材1.3 — 实战:用ASP.NET Web API和Angular.js创建单页面应用程序(上)