C#上传下载方法
1、后端上传图片方法(示例为一般处理程序中的)
/// <summary>
/// 传图
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public void UploadImgFile(HttpContext context)
{
string fileNameUrl = context.Request["fileurl"] == null ? "" : context.Request["fileurl"].ToString().Trim();
///获取上传的文件
var file = context.Request.Files[0];
//获取上传文件的文件名
string fileName = file.FileName;
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
var guidFileName = Guid.NewGuid().ToString("N")+"_"+ fileName;
string uploadUrl = str + @"FileList\"+ fileNameUrl;
string imgFileUrl = @"FileList\" + fileNameUrl+ @"\"+ guidFileName;
DirectoryInfo directory = new DirectoryInfo(uploadUrl);
if (!directory.Exists)//不存在
{
directory.Create();
}
//上传路径
string filePath = Path.Combine(uploadUrl, guidFileName);
//定义缓存数组
byte[] buffer;
//将文件数据塞到流里
var inputStream = file.InputStream;
///获取读取数据的长度
int readLength = Convert.ToInt32(inputStream.Length);
///给缓存数组指定大小
buffer = new byte[readLength];
//设置指针的位置为 最开始 的位置
inputStream.Seek(0, SeekOrigin.Begin);
//从位置 0 开始读取上传的文件的数据,数据读取到第一个参数buffer(缓存区)中
inputStream.Read(buffer, 0, readLength);
//创建输出文件流,指定文件的输出位置,模式为创建该新文件,读写权限为 写
using (var outputStream = new FileStream(filePath, FileMode.Create, FileAccess.Write))
{
//设置指针的位置为 最开始 的位置
outputStream.Seek(0, SeekOrigin.Begin);
//从起始位置 将 第一个参数 buffer(缓存区)里的数据写入到 filePath 指定的文件中
outputStream.Write(buffer, 0, buffer.Length);
}
//向前台返回上传文件的文件名,表示上传成功
//return JsonConvert.SerializeObject(new {code =0, Name = guidFileName });
RetunJsonMsg ajaxMsg = new RetunJsonMsg()
{
statu = "ok",
msg = imgFileUrl,
code = 0,
count = 0,
data = null
};
context.Response.Write(new JavaScriptSerializer().Serialize(ajaxMsg));
}
2、下载方法
/// <summary>
/// 下载文件的方法
/// </summary>
/// <param name="path">文件绝对路径</param>
/// <param name="fileName">客户端接收的文件名</param>
/// <returns></returns>
public static HttpResponseMessage DownloadPDFFile(string path, string fileName)
{
var stream = File.OpenRead(path);
HttpResponseMessage httpResponseMessage = new HttpResponseMessage(HttpStatusCode.OK);
try
{
httpResponseMessage.Content = new StreamContent(stream);
httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
if (!string.IsNullOrEmpty(fileName))
{
httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8),
};
}
return httpResponseMessage;
}
catch
{
stream.Dispose();
httpResponseMessage.Dispose();
throw;
}
}
分割线
netCore 接口上传下载
上传:

控制器:
/// <summary> /// 物料信息 上传文件 /// </summary> /// <param name="req"></param> /// <returns></returns> [ApiExplorerSettings(GroupName = "v40")] [HttpPost("file")] public BaseResponse<string> Import() { List<IFormFile> files = Request.Form.Files.ToList(); string res = _BLL.ImportMaterialFile(files); return ApiJsonFormat.GetResult<string>(res); }
业务层:
/// <summary> /// 物料信息 上传文件 /// </summary> /// <param name="req"></param> /// <returns></returns> /// <exception cref="NotImplementedException"></exception> public string ImportMaterialFile(List<IFormFile> req) { string message = string.Empty; var uploadAddree = $"wwwroot/Files/ImportMaterialFile/"; List<UploadResultMessage> uploadResultMessageList = new List<UploadResultMessage>(); bool isUpload = BLL.Common.Upload.UploadHelper.UploadFiles(req, uploadAddree,out uploadResultMessageList, out message,false); if (!isUpload) { //上传失败 throw new MyArgumentException(2036); } string fileUrl = uploadResultMessageList[0].fileName; return fileUrl; }
上传方法:
/// <summary> /// 上传文件到本地 /// 梁洪振 20220607 /// </summary> /// <param name="files">前端传输过来的文件流</param> /// <param name="uploadAddree">本地上传地址</param> /// <param name="uploadResultMessageList">返回实体</param> /// <param name="message">返回信息</param> /// <returns></returns> public static bool UploadFiles(List<IFormFile> files, string uploadAddree, out List<UploadResultMessage> uploadResultMessageList, out string message,bool isAutoCreateFiles = true) { uploadResultMessageList = new List<UploadResultMessage>(); message = string.Empty; if (files.Count < 1) { message = "当前列表无可上传文件"; return false; } //保存到本地的文件夹 文件存储路径 string directoryPath = ""; if (isAutoCreateFiles) { directoryPath = Path.Combine(uploadAddree, DateTime.Now.ToString("yyyyMM")); if (!Directory.Exists(directoryPath)) { Directory.CreateDirectory(directoryPath); } } else { directoryPath = directoryPath = Path.Combine(uploadAddree, "FileList"); ; } try { foreach (var item in files) { UploadResultMessage uploadResultMessage = new UploadResultMessage(); if (item != null) { #region 图片文件的条件判断 //文件后缀 var fileExtension = Path.GetExtension(item.FileName); //判断文件大小 long length = item.Length; if (length > 1024 * 1024 * 100) // { message = "上传的文件不能大于100M"; return false; } #endregion var strDateTime = DateTime.Now.ToString("yyMMddhhmmssfff"); //取得时间字符串 var strRan = Convert.ToString(new Random().Next(100, 999)); //生成三位随机数 var saveName = strDateTime + strRan + fileExtension; //保存在本地 using (FileStream fileStream = new FileStream(Path.Combine(directoryPath, saveName), FileMode.CreateNew)) { item.CopyTo(fileStream); fileStream.Flush(); uploadResultMessage.fileSize = length; uploadResultMessage.fileViewName = item.FileName; uploadResultMessage.ftpUrl = "";//FTP路径 uploadResultMessage.diskUrl = directoryPath + "/" + saveName;//保存文件路径 uploadResultMessage.suffix = Path.GetExtension(fileStream.Name); //保存文件扩展名 } //上传到本地后还需要保存到FTP uploadResultMessage.fileName = saveName; //保存文件名称 uploadResultMessageList.Add(uploadResultMessage); } } return true; } catch (Exception ex) { message = ex.Message; return false; } }
下载方法:
固定地址下载
/// <summary> /// 下载文件 /// </summary> /// <param name="path">文件绝对路径</param> /// <returns></returns> [ApiExplorerSettings(GroupName = "v40")] [HttpPost] public async Task<IActionResult> DownloadFile([FromBody] ReqID req) { ResMaterialInfoTable info = _BLL.Get<ResMaterialInfoTable, ReqID>(req, _table); var serviceUrl = $"wwwroot/Files/ImportMaterialFile/FileList/"+ info.FilePathName; byte[] bytes = null; WebClient client = new WebClient(); bytes = client.DownloadData(serviceUrl); return File(bytes, "application/octet-stream", info.FilePathName); }
读取配置文件地址下载:
/// <summary> /// 从远程服务器上下载读取文件,写入到本地 /// </summary> /// <param name="serviceUrl">远程服务地址:示例:https://up.bookresource.net.17sucai.cn/2021/admin/06-10/c4d8d351.pdf</param> /// <param name="localUrl">本地保存地址,示例:E:\\Test\\123.pdf</param> /// <returns></returns> [HttpGet] public FileResult FileDownloadExcelRar([FromQuery] string fileName) { string[] strArr = _configuration["FileDownloadExcelRar"].Split(','); byte[] bytes = null; int flag = 0; foreach (var str in strArr) { var serviceUrl = str + fileName; System.Net.HttpWebRequest request = null; System.Net.HttpWebResponse response = null; request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(serviceUrl); request.Timeout = 30000; try { response = (System.Net.HttpWebResponse)request.GetResponse(); flag = 1; } catch { flag = -1; } if (flag == 1) { WebClient client = new WebClient(); bytes = client.DownloadData(serviceUrl); } } return File(bytes, "application/octet-stream", fileName); }
获取配置文件在控制器中注入 IConfiguration
public readonly IHttpContextAccessor _accessor;
private readonly IConfiguration _configuration;
/// <summary>
///
/// </summary>
/// <param name="accessor"></param>
/// <param name="configuration"></param>
public FileDownloadController(IHttpContextAccessor accessor, IConfiguration configuration)
{
_configuration = configuration;
}
浙公网安备 33010602011771号