C# MVC5显示FTP地址下图片/PDF文件

4 篇文章 0 订阅
2 篇文章 0 订阅
该博客介绍了如何在IE浏览器中使用img标签直接加载FTP地址的图片,但指出谷歌浏览器不支持FTP,且存在安全风险。解决方案是通过后端获取FTP图片数据流并返回给前端,以安全方式展示图片。提供了后端C#代码示例,以及前端如何通过控制器获取图片数据并显示。
摘要由CSDN通过智能技术生成

IE可以直接使用img标签

<img src="ftp://account:password@imgurl/xxx.jpg" />

但是谷歌浏览器不支持FTP地址访问,ftp地址会暴露账号密码,存在安全问题。所以可以通过获取图片流的方式来处理。(注意:如果账号或密码有包含特殊字符,可以转义成url编码,如@转义成%40

后端获取ftp地址图片的数据流,通过File或者base64字符串返回,代码如下:

/// <summary>
/// 返回图片
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public ActionResult FileImage(string url)
{
    try
    {
        FtpWebRequest ftpWeb = (FtpWebRequest)WebRequest.Create(url);//创建ftp连接
        ftpWeb.Method = WebRequestMethods.Ftp.DownloadFile;
        ftpWeb.KeepAlive = false;
        ftpWeb.UseBinary = true;
        //ftpWeb.UsePassive = false;//如果GetResponse操作超时,可以尝试切换FTP连接模式
        ftpWeb.Credentials = new NetworkCredential("username", "password"); // 如果需要身份验证
        WebResponse ftpResponse = ftpWeb.GetResponse();
        Stream ftpStream = ftpResponse.GetResponseStream();//获取图片流

        MemoryStream outstream = new MemoryStream();//转成MS流
        int bufferLen = 4096;//缓冲区
        byte[] buffer = new byte[bufferLen];
        int count = 0;
        while ((count = ftpStream.Read(buffer, 0, bufferLen)) > 0)
        {
            outstream.Write(buffer, 0, count);
        }

        return File(outstream.ToArray(), "image/jpeg");//转成图片格式
        //return File(outstream.ToArray(), "application/pdf");//转成pdf格式
        //return Convert.ToBase64String(outstream.ToArray());//base64字符串
    }
    catch (Exception ex)
    {
        return Content("发生错误:" + ex.Message);
    }
}

前端img的src地址直接指向Controller,代码如下:

@{
    string[] urlArray = model.Split(',');//model为传入页面的多个ftp地址字符串,逗号分隔
    for (int index = 0; index < urlArray.Length; index++)
    {
        <img src="/Image/FileImage?url=@(urlArray[index])" alt="影像图片" style="width:auto;height:auto;padding-bottom:10px;" />
        //显示pdf文件的话,用iframe
        //如果返回的是base64字符串,则'<iframe src ="data:application/pdf;base64,' + result.Data + '"></iframe>'
    }
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值