netcore 上传文件

一般上传文件可以用formdata的文件格式将你要上传的文件和其他参数放在一个类里面 例如:

  public class uploadItemFile
{
    public int id { get; set; }
    public FormFile uploadFile { get; set; }
}

文件接收的类如下:

    [Consumes("multipart/form-data")]
    [HttpPost, Route("ItemPlanUploadFile")]
    public ResponseResult ItemPlanUploadFile([FromForm] uploadItemFile uploadItemFile)
    {
        try
        {
            //var file = HttpContext.Request.Form.Files.FirstOrDefault(f => f.Name == "uploadFile");
            var reFlie=HttpContext.Request.Form.Files;
            if(reFlie==null)
                return new ResponseResult(false, "操作失败:文件未上传", false);
            var itemFile=_context.goodsmg_item_files.FirstOrDefault(f => f.item_plan_id == uploadItemFile.item_plan_id);
            string path = AppDomain.CurrentDomain.BaseDirectory + "\\files\\" + "plan" + "\\";
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);
            var extension_name = reFlie[0].FileName.Split('.')[1];// formFile?.FileName.Split('.')[1];
            string fileName = DateTime.Now.ToString("yyyyMMddHHmmss") + "." + extension_name;
            string savepath = path + fileName;
            string remothpath = "//files//plan//" + fileName;
            FileStream fs = new FileStream(savepath, FileMode.OpenOrCreate, FileAccess.ReadWrite);
            var r = ReadFileBytes(reFlie[0]);
            fs.Write(r, 0, r.Length);
            fs.Close();
            if (itemFile!=null)
            {
                _context.Attach(itemFile);
                itemFile.remote_path = remothpath;
                itemFile.source_path = savepath;
                itemFile.extension_name = "." + extension_name;
                itemFile.file_name = reFlie[0].FileName;
                _context.SaveChanges();
            }
            else
            {
               
                goodsmg_item_file goodsmg_Item_File = new goodsmg_item_file();
                goodsmg_Item_File.item_plan_id = uploadItemFile.item_plan_id;
                goodsmg_Item_File.remote_path = remothpath;
                goodsmg_Item_File.source_path = savepath;
                goodsmg_Item_File.extension_name = "." + extension_name;
                goodsmg_Item_File.file_name = reFlie[0].FileName;
                _context.Entry(goodsmg_Item_File).State = EntityState.Added;
                _context.SaveChanges();
            }
            
            return new ResponseResult(true, "操作成功", true);

        }
        catch (Exception ex)
        {
            LogUtils.Exception(ex);
            return new ResponseResult(false, ex.Message, false);
        }
    }

    /// <summary>
    /// 文件流类型转化字节类型
    /// </summary>
    /// <param name="fileData">表单文件信息</param>
    /// <returns></returns>
    private byte[] ReadFileBytes(IFormFile fileData)
    {
        byte[] data;
        using (Stream inputStream = fileData.OpenReadStream())//读取上传文件的请求流
        {
            MemoryStream memoryStream = inputStream as MemoryStream;
            if (memoryStream == null)
            {
                memoryStream = new MemoryStream();
                inputStream.CopyTo(memoryStream);
            }
            data = memoryStream.ToArray();
        }
        return data;
    }

多个文件接收的时候可以通过HttpContext.Request.Form.Files.FirstOrDefault(f=>f.Name== "answer_img")这种方式获取对应的文件

如果前端直接展示图片可以通过base64的格式返回给前端

posted @   泽哥的学习笔记  阅读(274)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示