如何通过单击按钮查看位于服务器上的文件?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何通过单击按钮查看位于服务器上的文件?相关的知识,希望对你有一定的参考价值。

我点击一个按钮(按钮位于192.xxx.x.xxx Profile Details页面)传递给angularJS控制器文件,它调用API

$scope.docView = function () {     
    Method.getbyId("api call",docId).then(function(response) {
            if (response.data.message != null)
                window.open('//'+response.data.message);
            else
                alert("File Not Found !");
        }).catch(function (data) {
            console.log("Unknown Error");
        });
    }
}

API是:

    [Route("api call")]
    [HttpGet]
    public IHttpActionResult ViewDocument (Guid? docId)
    {
          /*background work*/            

                response.Message = filePath;
            }                
        }
        catch (Exception ex)
        {
            Utils.Write(ex);
        }

        return Ok(response);
    }

在response.data.message中,服务器上的文件路径(192.xxx.x.xxx folder filename)即将到来,它将通过window.open()打开该文件。但是在URL中,文件夹的整个路径是可见的,这将成为安全漏洞。因此,我想在同一控制器中“在新视图中显示文件”,该控制器将在新选项卡中打开文件。网址应该是(192.xxx.x.xxx Profile Details?docid = xxxxxxxxxxxxxxxxx)。

答案

您正在寻找的内容,您可以在Google上快速搜索:“从ASP.NET Web API方法下载文件”。

例如herehere你会找到实现你正在寻找的东西的例子。

编辑:

HttpResponseMessage response = new HttpResponseMessage();
response.StatusCode = HttpStatusCode.OK;
response.Content = new StreamContent(result);
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(System.Net.Mime.DispositionTypeNames.Inline)
{
    FileName = "foo.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

源自thisthis线程。

您需要根据实际文件类型更改Content-Type。此外,如果文件在浏览器中实际可见,则取决于浏览器是否能够这样做。

以上是关于如何通过单击按钮查看位于服务器上的文件?的主要内容,如果未能解决你的问题,请参考以下文章

通过按钮更改 viewpager 片段 Click

如何从Android中的片段单击按钮打开片段

如何通过单击适配器类中代码的项目中的删除按钮来删除列表视图中的项目后重新加载片段?

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始

如何刷新片段上的列表视图

如何设置主活动中显示的默认片段?