突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿。

最近在做上传文件的功能,上传到ftp文件服务器有利于管理上传文件。

前面的博客有写到layui如何上传文件,然后控制器用IFormFile去接收,那么我们为了消除代码的重复,我们可以建一个公共类,这样就可以重用了。

其实上传很简单,用一个带有IFormFile参数的函数封装就OK了,如下:

        /// <summary>
/// 上传文件到ftp服务器上
/// </summary>
/// <param name="file">文件</param>
/// <param name="dateStr">文件时间戳</param>
/// <returns>bool</returns>
public static bool UploadFile(IFormFile file, long dateStr)
{
bool result = false;
using (MemoryStream fs = new MemoryStream())
{
file.CopyTo(fs);
long length = fs.Length;
FtpWebRequest ftpReq = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpAddress + dateStr.ToString() + "_" + file.FileName));
ftpReq.Credentials = new NetworkCredential(ftpUser, ftpPwd); //默认为true,连接不会关闭,设置为false,执行之后关闭连接
ftpReq.KeepAlive = false;
ftpReq.Method = WebRequestMethods.Ftp.UploadFile;
ftpReq.UseBinary = true;
using (Stream fsftp = ftpReq.GetRequestStream())
{
//设置缓冲大小
int BufferLength = ;
byte[] b = new byte[BufferLength];
fs.Seek(, SeekOrigin.Begin);
int i;
while ((i = fs.Read(b, , BufferLength)) > )
{
fsftp.Write(b, , i);
} result = true;
}
} return result;
}

这里定义了一个IFormFile用于传入文件,并用MemoryStream 写入到ftp服务器文件中,这里必须注意的是一定要加 fs.seek(0, SeekOrgin.Begin),这样byte数组才能从MemoryStream 读取到流。

然后就是从ftp服务器上下载文件了,这里也用一个byte数组类型的方法去封装,如下:

        /// <summary>
/// 下载附件
/// </summary>
/// <param name="fileName">附件名</param>
/// <returns>byte[]</returns>
public static byte[] DownloadFile(string fileName)
{
MemoryStream outputStream = new MemoryStream(); FtpWebRequest reqFTP = (FtpWebRequest)FtpWebRequest.Create(new Uri(ftpAddress + fileName)); reqFTP.Method = WebRequestMethods.Ftp.DownloadFile;
reqFTP.UseBinary = true;
reqFTP.UsePassive = false;
reqFTP.Credentials = new NetworkCredential(ftpUser, ftpPwd);
FtpWebResponse response = (FtpWebResponse)reqFTP.GetResponse();
Stream ftpStream = response.GetResponseStream();
long cl = response.ContentLength;
int bufferSize = ;
int readCount;
byte[] buffer = new byte[bufferSize];
readCount = ftpStream.Read(buffer, , bufferSize);
while (readCount > )
{
outputStream.Write(buffer, , readCount);
readCount = ftpStream.Read(buffer, , bufferSize);
} byte[] file = new byte[outputStream.Length * ];
file = outputStream.GetBuffer(); ftpStream.Close();
outputStream.Close();
response.Close(); return file;
}

这里参数fileName是服务器上的文件名,这里为什么要用byte数组类型的,控制器调用之后返回的数据存在数组中,调用return File(),就可以把文件传到前端。这样就完成下载了。

有什么错误请多多指正,谢谢大家!~~~~

.Net 上传文件到ftp服务器和下载文件的更多相关文章

  1. Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本

    说明:  1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...

  2. Linux下自动备份MySQL数据库并上传到远程FTP服务器

    Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明:  1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...

  3. 静态资源上传至远程ftp服务器,ftp工具类封装

    工具类,是一个单独的工程项目 提取必要信息至ftp.properties配置文件中 ftp_host=192.168.110.128 ftp_port=21 ftp_username=ftpuser ...

  4. FTP服务器上传工具,FTP服务器上传工具下载!

    IIS7服务器管理工具能够作为FTP的客户端,进行FTP的命令操作,可在客户端,下载,安装FTP软件! 同时,它也可以作为VNC的客户端,进行VNC的命令操作!它能够批量连接Windows和Linux ...

  5. Android 上传文件到 FTP 服务器

    实现背景 近期接触到一个需求,就是将文件从Android系统上传到FTP服务器,虽然之前接触过FTP服务器,了解基本的使用流程,但是将此流程从使用习惯转化为代码实现还是有一定难度的.但是基本的流程还是 ...

  6. java 上传文件到 ftp 服务器

    1.  java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...

  7. ftp配置 Laravel上传文件到ftp服务器

    listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask= dirmessage_enable=YES ...

  8. 将本地文件上传到指定的服务器(HttpWebRequest方法)

    将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值. ///<summary> /// 将本地文件上传到指定的服务器(H ...

  9. JavaScript进阶(九)JS实现本地文件上传至阿里云服务器

    JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...

随机推荐

  1. JS小案例(基础好烦恼少)----持续更新

    *************************************************** <!DOCTYPE html> <html lang="en&quo ...

  2. 文本类型的HTML

    <b>文本</b>加粗<i>倾斜<strong>加粗语气 工作里尽量使用strong<em>倾斜语气 工作里尽量使用em<u>下 ...

  3. pymsql模块使用

    数据库连接客户端 链接:https://pan.baidu.com/s/1pM0h4SV 密码:614v  sql指令基本用法:

  4. MySQL5.7二进制安装

    MySQL-5.7.14从零开始-安装 首先我们要选择下载MySQL的版本: 登录官方网站下载:https://dev.mysql.com/downloads/mysql/ 下面我们选择5.7.14的 ...

  5. [翻译] NimbusKit

    注意:NimbusKit 是Github上iOS部分开源库排名前20中的一员. http://nimbuskit.info/ https://github.com/jverkoey/nimbus ht ...

  6. js 获取 网页屏幕高度 窗口高度 元素高度 滚动高度

    常用: JS 获取浏览器窗口大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 // 获取窗口宽度 if (window.innerWidth) winWidth = ...

  7. C# 转换运算符:implicit(隐式),explicit(显示)

    //A类 class Cls1 { public string name; //构造函数 public Cls1(string name) { this.name = name; } //implic ...

  8. TP5:隐藏inde.php文件

    原文地址:https://www.cnblogs.com/wangjiayi/p/7943268.html 一,找到/public/.htaccess文件,如果你的入口文件已经移动到根目录下,那么你的 ...

  9. July 19th 2017 Week 29th Wednesday

    Rather than envy others, it is better to speed up their own pace. 与其羡慕他人,不如加快自己的脚步. The envy of othe ...

  10. easyui学习笔记5—panel加载其他的页面

    上一篇中我们看到了panel的基本实现,没有什么难度,最重要的是data-options和class两个标签属性的定义.这里我们将看一下在panel中如何加载其他的页面. 1.先看看引用的资源文件和h ...