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;
}

 

posted @ 2021-08-03 09:44  znyzny  阅读(420)  评论(0)    收藏  举报