.Net 上传文件到ftp服务器和下载文件
突然发现又很久没有写博客了,想起哎呦,还是写一篇博客记录一下吧,虽然自己还是那个渣渣猿。
最近在做上传文件的功能,上传到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服务器和下载文件的更多相关文章
- Debian下自动备份文件并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
说明: 1.备份目录/home/osyunwei下面所有的文件到/home/osyunweibak里面,并且保存为osyunwei20120701.tar.gz的压缩文件格式(2012_07_01是 ...
- Linux下自动备份MySQL数据库并上传到远程FTP服务器
Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本 说明: 1.备份MySQL数据库存放目录/var/lib/mysql下面的xshelldata数据库 ...
- 静态资源上传至远程ftp服务器,ftp工具类封装
工具类,是一个单独的工程项目 提取必要信息至ftp.properties配置文件中 ftp_host=192.168.110.128 ftp_port=21 ftp_username=ftpuser ...
- FTP服务器上传工具,FTP服务器上传工具下载!
IIS7服务器管理工具能够作为FTP的客户端,进行FTP的命令操作,可在客户端,下载,安装FTP软件! 同时,它也可以作为VNC的客户端,进行VNC的命令操作!它能够批量连接Windows和Linux ...
- Android 上传文件到 FTP 服务器
实现背景 近期接触到一个需求,就是将文件从Android系统上传到FTP服务器,虽然之前接触过FTP服务器,了解基本的使用流程,但是将此流程从使用习惯转化为代码实现还是有一定难度的.但是基本的流程还是 ...
- java 上传文件到 ftp 服务器
1. java 上传文件到 ftp 服务器 package com.taotao.common.utils; import java.io.File; import java.io.FileInpu ...
- ftp配置 Laravel上传文件到ftp服务器
listen=YES anonymous_enable=NO local_enable=YES write_enable=YES local_umask= dirmessage_enable=YES ...
- 将本地文件上传到指定的服务器(HttpWebRequest方法)
将本地文件上传到指定的服务器(HttpWebRequest方法),通过文件流,带文件名,同文件一同上传的表单文本域及值. ///<summary> /// 将本地文件上传到指定的服务器(H ...
- JavaScript进阶(九)JS实现本地文件上传至阿里云服务器
JS实现本地文件上传至阿里云服务器 前言 在前面的博客< JavaScript进阶(八)JS实现图片预览并导入服务器功能>(点击查看详情)中,实现了JS将本地图片文件预览并上传至阿里云服务 ...
随机推荐
- Jave 之方法-函数(5)
如何定义Java中的方法: 所谓方法,就是用来解决一类问题的代码的有序组合,是一个功能模块. (方法在C语言中被称为函数) 一般情况下,定义一个方法的语法是: 其中: 1. 访问修饰符:方法允许被访问 ...
- Android 录音getMaxAmplitude()
这个方法是用来获取在前一次调用此方法之后录音中出现的最大振幅,文档解释如下: Returns the maximum absolute amplitude that was sampled since ...
- JAVA基本数据类型、引用数据类型-参数传递详解
1:基本类型的参数传值 对于基本数据类型,修改这个值并不会影响作为参数传进来的那个变量,因为你修改的是方法的局部变量,是一个副本.实参的精度级别应等于或低于形参的精度级别,否则报错. class JB ...
- DELPHI 小结
//十六进制(S)-->>十进制(I) [重写:Jey]function hextoint(s: string): Integer; begin //$代表16进制 ...
- CentOS: 将虚拟机迁移到 Azure (以阿里云为例)
Azure 虚拟机能很容易地导出 vhd 并迁移到各种环境中,包含本地及云端环境,或者迁移至其他区域.这为开发.测试.扩展带来了极大的便利.因此本文以阿里云为例,阐述的是如何将 CentOS 6.8 ...
- Hadoop High Availability高可用
HDFS HA Namenode HA 详解 hadoop2.x 之后,Clouera 提出了 QJM/Qurom Journal Manager,这是一个基于 Paxos 算法(分布式一致性算法) ...
- leetcode Ch1-search 2014
1. Search Insert Position class Solution { public: int searchInsert(int A[], int n, int target) { ,r ...
- js 日期格式化及日期增减
//Demo:new Date().format("yyyy-MM-dd hh:mm:ss.SSS") Date.prototype.format = function (form ...
- 定制UITabBar显示样式
定制UITabBar显示样式 思路是这样子的: 1. 初始化UITabBarController,并装载进来几个其他的ViewController 2. 获取每个控制器的UITabBarItem 3. ...
- WBS 工作分解结构
WBS:工作分解结构(Work Breakdown Structure) 创建WBS:创建WBS是把项目 交付成果和项目工作分解成较小的,更易于管理的组成部分的过程. 主要用途WBS是一个描述思路的规 ...