net core文件接收(jpg、png、zip、pdf等自己设置)

59 篇文章 11 订阅
15 篇文章 2 订阅

api

日志中间件需要在包控制管理台安装 SerilogSerilog.Sinks.File
需要在Program.cs中配置日志工具
在这里插入图片描述

using Microsoft.AspNetCore.Mvc;
using PublicHealthUploadFile.PublicMethods;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using Serilog;
 

namespace UploadFile.Controllers
{
    [Route("api/[controller]/[action]")]
    [ApiController]
    public class UploadFileController : ControllerBase
    {
        [HttpPost]
        [DisableRequestSizeLimit]//解决上传限制问题
        public ActionResult UploadFile()
        {
            try
            {
            	Log.Information("Beging Upload File.");
                if (Request.Form.Files.Count == 0) return BadRequest("Upload Failed: no file.");

                var file = Request.Form.Files[0];

                if (file.Length < 1) return BadRequest("Upload Failed: file is empty.");

                string fileName = ContentDispositionHeaderValue.Parse(file.ContentDisposition).FileName.ToString();


                string fileExtension = Path.GetExtension(file.FileName);

                //判断可以上传的文件格式   自行设置
                const string fileFilt = ".gif|.jpg|.jpeg|.png|.7z|.zip|.rar|.pdf";
                if (fileExtension == null)
                {
                    return BadRequest("Upload Failed: 上传的文件没有后缀."); 
                }
                if (fileFilt.IndexOf(fileExtension.ToLower(), StringComparison.Ordinal) <= -1)
                {
                    return BadRequest("Upload Failed: 请上传jpg、png、gif、zip、7z、rar、pdf格式的文件."); 
                } 

                //判断文件大小
                long length = file.Length;
                if (length > 1024 * 1024 * 3) //3M
                {
                    return BadRequest("Upload Failed: 上传的文件不能大于3M."); 
                }



                fileName = fileName.Replace("\"","");
                var FileType = Request.Form["Type"].ToString();//类型:根据自己需要选择加不加
                var FileCode = Request.Form["CardOrCode"].ToString();//编号: 根据自己需要选择加不加
                var FileDate = Request.Form["Date"].ToString();//根据自己需要选择加不加

                if (FileType!="身份证"&&(string.IsNullOrEmpty(FileDate)||FileDate=="null")) return BadRequest("Upload Failed: The \"Date\" parameter cannot be empty.");//自定义判断   

                List<string> filetypeList = new List<string> {"身份证", "签名", "附件"};
                if (!filetypeList.Contains(FileType)) return BadRequest("Upload Failed: File types do not match.");//如果FileType 不存在于filetypeList中  则返回异常

                string fullPath = GetFullPath(fileName, FileType, FileCode, FileDate);//组合成要存储到的目录

                using (var stream = new FileStream(fullPath, FileMode.Create))
                {
                    file.CopyTo(stream);
                }
                //Program.HostPrefix是在Program.cs文件定义的参数也可自己定义自己服务器访问的地址  实际拼出来的地址就是  ip+port+服务器存储图片的路径
                var url = $"{Program.HostPrefix}{ fullPath.Substring(fullPath.IndexOf("pictures/") + "pictures/".Length)}"; 

				Log.Information("End Upload File.");
                return Ok(new { message = "Upload Successful.", url });
            }
            catch (Exception ex)
            {
            	Log.Error("Upload Failed.");
                return BadRequest("Upload Failed: " + ex.Message);
            }
        } 

        [NonAction]
        private string GetFullPath(string fileName, string FileType, string FileCode, string FileDate)
        {
            string path = "";
            // 保存路径  pictures/IdentityCard/身份证.jpg     pictures/Signature/年/身份证/日期/****.jpg 
            int year = 0; string date = "";
            if (!string.IsNullOrEmpty(FileDate))
            {
                DateTime dt = DateTime.Parse(FileDate); year = dt.Year; date = dt.ToString("yyyy-MM-dd");
            }
            string file1 = fileName.Replace(fileName.Remove(fileName.LastIndexOf(".")), Guid.NewGuid().ToString("N"));
            FileCode= Encrypt.EncryptText(FileCode);
            switch (FileType)
            {
                case "身份证":path = CreatePath($"IdentityCard/{FileCode}/") + file1; break;
                case "签名":DataIsNull(year); path = CreatePath($"Signature/{year}/{FileCode}/{date}/") + file1; break;
                case "附件": DataIsNull(year); path = CreatePath($"Annex/{year}/{date}/") + file1; break;
                default:
                    path = CreatePath($"Other/Year/{date}/") + file1; break;
            }
            return path;
        }



        [NonAction]
        private void DataIsNull(int year) {
            if (year == 0) throw new Exception("日期参数未传参。");
        }   


        [NonAction]
        private string CreatePath(string path)
        {
            string basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);//获取网站运行根目录

            string picturesPath = basePath + "/pictures/";


            picturesPath += path;

            if (!Directory.Exists(picturesPath))
            {
                Directory.CreateDirectory(picturesPath);
            }

            return picturesPath;
        }
    }
}

Program.cs中配置日志组件
在mian函数中添加以下代码

using Serilog;
using Serilog.Events;



 public static int Main(string[] args)
        {
            //CreateHostBuilder(args).Build().Run();


            Log.Logger = new LoggerConfiguration()
               .MinimumLevel.Debug()//最小的输出单位是Debug级别的
               .MinimumLevel.Override("Microsoft", LogEventLevel.Information)//将Microsoft前缀的日志的最小输出级别改成Information
               .Enrich.FromLogContext()
               .WriteTo.File(@"./logs/log.txt", rollingInterval: RollingInterval.Day).CreateLogger();

            try
            {
                Log.Information("Starting web host");
                CreateHostBuilder(args).Build().Run();
                return 0;
            }
            catch (Exception ex)
            {
                Log.Fatal(ex, "Host terminated unexpectedly");
                return 1;
            }
            finally
            {
                Log.CloseAndFlush();
            }
        }

Program.cs中配置解决文件上传限制
.UseKestrel(options=> {
options.Limits.MaxRequestBodySize = null;
});

public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>()
                    .UseUrls("http://*:365")
                    .UseKestrel(options=> {
                        options.Limits.MaxRequestBodySize = null;
                    });
                });

Startup.cs 中的ConfigureServices中 在最前边添加以下代码,解决文件上传限制问题

services.Configure<FormOptions>(x => 
            { 
                x.ValueLengthLimit = int.MaxValue;
                x.ValueCountLimit = int.MaxValue;
                x.MultipartBodyLengthLimit = long.MaxValue;
                x.MultipartBoundaryLengthLimit = int.MaxValue;
                x.BufferBodyLengthLimit = long.MaxValue;
                x.BufferBody = true;
                x.MemoryBufferThreshold = int.MaxValue;
                x.KeyLengthLimit = int.MaxValue;
                x.MultipartHeadersLengthLimit = int.MaxValue;
                x.MultipartHeadersCountLimit = int.MaxValue; 
            });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
您好!关于使用 EvoWordToPdf 将 Word 转换为 PDF,我可以提供以下 C# .NET Core 代码示例供参考: ```csharp using System.IO; using EvoPdf; namespace WordToPdfConverter { class Program { static void Main(string[] args) { // 输入 Word 文件路径和输出 PDF 文件路径 string inputFilePath = @"C:\input.docx"; string outputFilePath = @"C:\output.pdf"; // 创建 WordToPdfConverter 对象 WordToPdfConverter wordToPdfConverter = new WordToPdfConverter(); // 设置 PDF 文档的页面大小和方向 wordToPdfConverter.PdfDocumentOptions.PageSize = PdfPageSize.A4; wordToPdfConverter.PdfDocumentOptions.PdfPageOrientation = PdfPageOrientation.Portrait; // 将 Word 文件转换为 PDF 文件 byte[] pdfBytes = wordToPdfConverter.ConvertWord(inputFilePath); // 将 PDF 字节流写入文件 File.WriteAllBytes(outputFilePath, pdfBytes); } } } ``` 在上述代码中,我们首先指定了输入 Word 文件和输出 PDF 文件的路径。然后,我们创建了一个 WordToPdfConverter 对象,并设置PDF 文档的页面大小和方向。最后,我们调用 ConvertWord 方法将 Word 文件转换为 PDF 文件,并将 PDF 字节流写入输出文件。 需要注意的是,为了使用 EvoWordToPdf,我们需要先安装 EvoPdf 库。您可以通过 NuGet 包管理器来安装 EvoPdf 库,或者手动下载 EvoPdf.dll 并将其添加到项目引用中。 希望这个代码示例可以帮助到您!如果您有任何问题或疑问,欢迎继续向我提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

香煎三文鱼

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值