ASP.NET MVC实现单个图片上传、限制图片格式与大小并在服务端裁剪图片

在ASP.NET MVC中实现单个图片上传、限制图片格式与大小并在服务端裁剪图片,可以按照以下步骤进行:

步骤1:创建MVC项目

在Visual Studio中创建一个新的ASP.NET MVC项目。

步骤2:上传图

在Views文件夹中创建一个名为Upload的文件夹,并在其中创建一个名为Index.cshtml的视图。在视图中添加以下HTML代码:

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="file" />
    <input type="submit" value="Upload" />
}

这个视图包含一个文件上传表单,它将文件上传到Home控制器的Upload方法。

步骤3:创建上传控制器

在Controllers文件夹中创建一个名为HomeController的控制器,并添加以下代码:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase file)
    {
        if (file != null && file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            var fileExtension = Path.GetExtension(fileName);
            var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" };
            var allowedSize = 1024 * 1024 * 2; // 2MB

            if (allowedExtensions.Contains(fileExtension.ToLower()) && file.ContentLength <= allowedSize)
            {
                var filePath = Path.Combine(Server.MapPath("~/Uploads"), fileName);
                file.SaveAs(filePath);

                // TODO: Crop image

                return RedirectToAction("Index");
            }
            else
            {
                ModelState.AddModelError("", "Invalid file format or size.");
            }
        }

        return View("Index");
    }
}

这个控制器包含一个名为Upload的HttpPost方法,它接受一个HttpPostedFileBase对象,该对象包含上传的文件。在方法中,我们首先检查文件是否存在并且大小是否小于或等于2MB。然,我们检查文件扩展名是否为.jpg、.jpeg、.png或.gif。如果文件格式和大小都符合要求,我们将文件保存到Uploads文件夹中,并重定向到Index视图。否则,我们将错误消息添加到ModelState中,并返回Index视图。

步骤4:裁剪图片

在Upload方法中,我们需要添加代码来裁剪上传的。我们可以使用ImageMagick库来裁剪图片。以下是简单的裁剪方法:

private void CropImage(string filePath, int width, int height)
{
    using (var image = new MagickImage(filePath))
    {
        image.Resize(width, height);
        image.Crop(width, height, Gravity.Center);
        image.Write(filePath);
    }
}

这个方法接受一个文件路径、宽度和高度,并使用ImageMagick库来裁剪图片。可以在Upload方法中调用这个方法来裁剪上传的图片。

示例1:上传单个图片并裁剪

假设我们要上传一个名为test.jpg的图片,并将其裁剪为200x200像素。我们可以使用以下代码:

[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
    if (file != null && file.ContentLength > 0)
    {
        var fileName = Path.GetFileName(file.FileName);
        var fileExtension = Path.GetExtension(fileName);
        var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" };
        var allowedSize = 1024 * 102 * 2; // 2MB

        if (allowedExtensions.Contains(fileExtension.ToLower()) && file.ContentLength <= allowedSize)
        {
            var filePath = Path.Combine(Server.MapPath("~/Uploads"), fileName);
            file.SaveAs(filePath);

            CropImage(filePath, 200, 200);

            return RedirectToAction("Index");
        }
        else
        {
            ModelState.AddModelError("", "Invalid file format or size.");
        }
    }

    return View("Index");
}

这个代码将上传的图片保存到Uploads文件夹中,并将其裁剪为200x200像素。

示例2:上传多个图片并裁剪

假设我们要上传多个图片,并它们裁剪为200x200像素。我们可以使用以下代码:

@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <input type="file" name="files" multiple />
    <input type="submit" value="Upload" />
}

这个代码将允许我们上传多个图片。

[HttpPost]
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files)
{
    foreach (var file in files)
    {
        if (file != null && file.ContentLength > 0)
        {
            var fileName = Path.GetFileName(file.FileName);
            var fileExtension = Path.GetExtension(fileName);
            var allowedExtensions = new[] { ".jpg", ".jpeg", ".png", ".gif" };
            var allowedSize = 1024 * 1024 * 2; // 2MB

            if (allowedExtensions.Contains(fileExtension.ToLower()) && file.ContentLength <= allowedSize)
            {
                var filePath = Path.Combine(Server.MapPath("~/Uploads"), fileName);
                file.SaveAs(filePath);

                CropImage(filePath, 200, 200);
            }
            else
            {
                ModelState.AddModelError("", "Invalid file format or size.");
            }
        }
    }

    return RedirectToAction("Index");
}

这个代码将允许我们上传多个图片,并将它们保存到Uploads文件夹中,并将它们裁剪为200x200像素。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:ASP.NET MVC实现单个图片上传、限制图片格式与大小并在服务端裁剪图片 - Python技术站

(0)
上一篇 2023年5月12日
下一篇 2023年5月12日

相关文章

  • c#关于非托管内存的释放问题及解读

    C# 关于非托管内存的释放问题及解读 背景介绍 在 C# 中,我们通常使用垃圾回收机制来释放托管内存,但是当我们需要使用非托管资源时,需要我们自己手动管理非托管内存的释放。如果我们没有适当地释放非托管资源,可能会引起内存泄漏的问题,导致程序性能下降,甚至是崩溃。 下面详细介绍如何在 C# 中缓解这一问题。 释放非托管内存 1. 常见的非托管内存 C# 中常用…

    C# 2023年5月15日
    00
  • C#分布式事务的超时处理实例分析

    C#分布式事务的超时处理实例分析 简介 本文将介绍在C#中处理分布式事务超时的实例,重点是针对传统的数据库操作,如何处理分布式事务超时的问题。 超时处理 在分布式事务中,一个事务可能会跨越多个数据库。当一个分布式事务出现了超时异常,我们需要对其进行处理。 超时处理有两个主要的目的: 避免事务无限制地等待,耗尽所有的资源 报告错误并撤销操作 下面介绍两个示例,…

    C# 2023年5月15日
    00
  • Unity3D摄像机跟随小球移动而不旋转的设置方法

    让我们来讲解一下“Unity3D摄像机跟随小球移动而不旋转的设置方法”,以下是具体的步骤: 步骤一:创建一个场景 首先,在Unity编辑器中创建一个新场景,然后创建一个小球和一个摄像机。将小球放在场景中央,并将摄像机放在适当的位置来拍摄小球。 步骤二:设置摄像机位置和旋转 接下来,我们需要将摄像机的位置和旋转设置为固定的。具体步骤如下: 找到摄像机组件Ins…

    C# 2023年6月3日
    00
  • asp.net(c#)开发中的文件上传组件uploadify的使用方法(带进度条)

    下面我将为您详细讲解asp.net(c#)开发中文件上传组件uploadify的使用方法(带进度条)的完整攻略。 一. 简介 uploadify是一款基于jQuery的文件上传插件,支持多文件上传,支持进度条显示。 二. 安装与引入 下载uploadify:在官网 https://www.uploadify.com/ 下载uploadify并解压文件。 引入…

    C# 2023年6月1日
    00
  • 记一次 Windows10 内存压缩模块 崩溃分析

    一:背景 1. 讲故事 在给各位朋友免费分析 .NET程序 各种故障的同时,往往也会收到各种其他类型的dump,比如:Windows 崩溃,C++ 崩溃,Mono 崩溃,真的是啥都有,由于基础知识的相对缺乏,分析起来并不是那么的顺利,今天就聊一个 Windows 崩溃的内核dump 吧,这个 dump 是前几天有位朋友给到我的,让我帮忙看一下,有了dump之…

    C# 2023年5月2日
    00
  • C#中的分布式ID生成组件IDGen介绍并给出示例代码

    C#中的IDGen是一个C#实现的Twitter Snowflake算法的ID生成器,可以生成全局唯一的ID,支持高并发场景下的ID生成。在本篇文章中,我们将介绍IDGen的使用方法并提供相关的C#示例代码。 IDGen的介绍 IDGen是一款开源的分布式唯一ID生成器,支持多种ID生成算法,并且可以在高并发场景下快速生成全局唯一的ID。目前支持的ID生成算…

    C# 2023年4月24日
    00
  • C#(int)中Convert、Parse、TryParse的区别

    区别:Convert、Parse、TryParse都是将字符串转换为数字类型的方法,但它们的使用场景和实现方式略有不同: Convert Convert是.NET Framework中的一个通用类型转换方法,可以将一个值从一种数据类型转换为另一种数据类型。其中,Convert.ToInt32(string)可以将字符串转换为32位带符号整数类型(int)。 …

    C# 2023年5月15日
    00
  • Winform窗体如何改变语言类型

    Winform 窗体的语言设置主要涉及以下两方面: 改变窗体语言的方式 处理措施 下面我们将会讲解如何进行以上两个方面设置。 改变窗体语言的方式 Winforms 默认依赖系统语言,在资源文件中保存语言翻译。有三种常见方式实现表单翻译: 静态文本资源文件 动态文本资源文件 使用第三方库 静态文本资源文件 使用静态文本资源文件时,我们在应用程序中会有一个包含预…

    C# 2023年6月6日
    00
合作推广
合作推广
分享本页
返回顶部