.net core实现单文件上传、多文件上传、js提交实现文件上传、图片预览

1. 单文件上传

在Visual Studio 2019中新建一个MVC项目。
在HomeController中添加SingleFile方法

public IActionResult SingleFile(IFormFile file)
{
    var dir = env.WebRootPath;
    using (var fileStream = new FileStream(Path.Combine(dir,"file.png"),FileMode.Create,FileAccess.Write))
    {
        file.CopyTo(fileStream);
    }
    return RedirectToAction("Index");
}

在HomeController对应的Index.cshtml视图中添加视图代码:

<div>
    <h4>单文件上传</h4>
    <form asp-controller="Home" asp-action="SingleFile" enctype="multipart/form-data" method="post">
        <input type="file" name="file" />
        <button type="submit" class="btn btn-primary">提交</button>
    </form>
</div>

control+F5运行项目,可以测试单文件上传功能

2. 多文件上传

在HomeController中添加Action 方法:

public IActionResult MultipleFile(IEnumerable<IFormFile> files)
{
    var dir = env.WebRootPath;
    foreach (var file in files)
    {
        using (var fileStream = new FileStream(Path.Combine(dir,file.FileName),FileMode.Create,FileAccess.Write))
        {
            file.CopyTo(fileStream);
        }
    }
    return RedirectToAction("Index");
}

视图代码:

<div>
    <h4>多文件上传</h4>
    <form asp-controller="Home" asp-action="MultipleFile" enctype="multipart/form-data" method="post">
        <input type="file" name="files" multiple />
        <button type="submit">提交</button>
    </form>
</div>

3. 模型中的文件上传

  1. 新建模型类文件:SomeForm
using Microsoft.AspNetCore.Http;

namespace FileUploadDemo.Models
{
    public class SomeForm
    {
        public string Name { get; set; }
        public IFormFile File { get; set; }
    }
}

  1. Action方法:
public IActionResult FileInModel(SomeForm someForm)
{
    var dir = env.WebRootPath;
    using (var fileStream = new FileStream(Path.Combine(dir, someForm.Name), FileMode.Create, FileAccess.Write))
    {
        someForm.File.CopyTo(fileStream);
    }
    return RedirectToAction("Index");
}
  1. 视图
<div>
    <h4>模型中的文件上传</h4>
    <form asp-controller="Home" asp-action="FileInModel" enctype="multipart/form-data" method="post">
        <input type="text" name="someForm.Name" />
        <input type="file" name="someForm.File" />
        <button type="submit">提交</button>
    </form>
</div>

4. 单文件上传(JS提交)

使用的js库axios。
Action方法与前面单文件上传一样
视图中的代码:

<div>
    <h4>单文件上传(JS)</h4>
    <input type="file" onchange="UploadFile(event)" />
</div>
@section Scripts{
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.20.0-0/axios.min.js"></script>
    <script>
        var UploadFile = function (e) {
            console.log(e);
            var file = e.target.files[0]
            var formData = new FormData();
            formData.append("file", file);
            axios.post("/Home/SingleFile", formData);
        }
    </script>
}

5. 多文件上传(JS提交)

Action方法与前面多文件上传一样
视图中的代码:


<div>
    <h4>多文件上传(JS)</h4>
    <input type="file" multiple onchange="UploadFiles(event)" />
</div>
@section Scripts{
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.20.0-0/axios.min.js"></script>
    <script>
        //多文件上传
        var UploadFiles = function (e) {
            console.log(e);
            var files = e.target.files;
            var formData = new FormData();
            for (var i = 0; i < files.length; i++) {
                formData.append("files", files[i]);
            }
            axios.post("/Home/MultipleFile", formData);
            console.log("文件上传成功");
        }
    </script>
}

6. 模型中的文件上传(JS实现)

Action方法与前面模型中的文件上传一样
视图中的代码:

<div>
    <h4>模型中的文件上传(JS)</h4>
    <input type="text" id="fileName" />
    <input type="file" onchange="UploadFileToModel(event)" />
</div>
@section Scripts{
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.20.0-0/axios.min.js"></script>
    <script>
//模型中的文件上传
        var UploadFileToModel = function (e) {
            var fileName = document.getElementById("fileName").value;
            var file = e.target.files[0];
            var formData = new FormData();
            formData.append("someForm.Name", fileName);
            formData.append("someForm.File", file);
            axios.post("/Home/FileInModel", formData);
        }
     </script>
}

7. 图片预览

只是在视图文件中实现,未做上传
视图代码:

@{
    ViewData["Title"] = "Home Page";
}
@section Style{
    <style>
        * {
            -webkit-border-radius: 0 !important;
            -moz-border-radius: 0 !important;
            border-radius: 0 !important;
        }
        .image-preview {
            width: 300px;
            min-height: 100px;
            border: 2px solid #dddddd;
            margin-top: 15px;
            display: flex;
            align-items: center;
            justify-content: center;
            font-weight: bold;
            color: #cccccc;
        }

        .image-preview__image {
            display: none;
            width: 100%;
        }
    </style>
}

<div>
    <h4>单文件上传</h4>
    <form asp-controller="Home" asp-action="SingleFile" enctype="multipart/form-data" method="post">
        <input type="file" name="file" />
        <button type="submit" class="btn btn-primary">提交</button>
    </form>
</div>


<div>
    <h4>多文件上传</h4>
    <form asp-controller="Home" asp-action="MultipleFile" enctype="multipart/form-data" method="post">
        <input type="file" name="files" multiple />
        <button type="submit">提交</button>
    </form>
</div>

<div>
    <h4>模型中的文件上传</h4>
    <form asp-controller="Home" asp-action="FileInModel" enctype="multipart/form-data" method="post">
        <input type="text" name="someForm.Name" />
        <input type="file" name="someForm.File" />
        <button type="submit">提交</button>
    </form>
</div>

<div>
    <h4>单文件上传(JS)</h4>
    <input type="file" onchange="UploadFile(event)" />
</div>

<div>
    <h4>多文件上传(JS)</h4>
    <input type="file" multiple onchange="UploadFiles(event)" />
</div>

<div>
    <h4>模型中的文件上传(JS)</h4>
    <input type="text" id="fileName" />
    <input type="file" onchange="UploadFileToModel(event)" />
</div>

<div>
    <h4>图片上传预览</h4>
    <input type="file" name="inpFile" id="inpFile">
    <div id="imagePreview" class="image-preview">
        <img src="" alt="image preview" class="image-preview__image">
        <span class="image-preview__default-text">图片预览</span>
    </div>
</div>

@section Scripts{
    <script src="https://cdn.bootcdn.net/ajax/libs/axios/0.20.0-0/axios.min.js"></script>
    <script>
        //单文件上传
        var UploadFile = function (e) {
            console.log(e);
            var file = e.target.files[0]
            var formData = new FormData();
            formData.append("file", file);
            axios.post("/Home/SingleFile", formData);
        }

        //多文件上传
        var UploadFiles = function (e) {
            console.log(e);
            var files = e.target.files;
            var formData = new FormData();
            for (var i = 0; i < files.length; i++) {
                formData.append("files", files[i]);
            }
            axios.post("/Home/MultipleFile", formData);
            console.log("文件上传成功");
        }

        //模型中的文件上传
        var UploadFileToModel = function (e) {
            var fileName = document.getElementById("fileName").value;
            var file = e.target.files[0];
            var formData = new FormData();
            formData.append("someForm.Name", fileName);
            formData.append("someForm.File", file);
            axios.post("/Home/FileInModel", formData);
        }

        //图片预览
        const inpFile = document.getElementById("inpFile");
        const previewContainer = document.getElementById("imagePreview");
        const previewImage = previewContainer.querySelector('.image-preview__image');
        const previewDefaultText = previewContainer.querySelector('.image-preview__default-text');

        inpFile.addEventListener("change", function () {
            const file = this.files[0];
            if (file) {
                const reader = new FileReader();
                previewDefaultText.style.display = 'none';
                previewImage.style.display = 'block';

                reader.addEventListener('load', function () {
                    console.log(this);
                    previewImage.setAttribute('src', this.result);
                });

                reader.readAsDataURL(file);
            } else {
                previewDefaultText.style.display = null;
                previewImage.style.display = null;
                previewImage.setAttribute('src', "");
            }
        });
    </script>
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
.NET Core中使用API进行文件上传可以通过以下步骤完成: 1. 首先,创建一个API控制器或一个接受文件上传的动作方法。通过在方法参数中使用[FormFile]属性来声明接收文件的参数。例如: ```c# [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile file) { // 代码逻辑... } ``` 2. 在控制器或方法中,可以使用`FileStream`或`MemoryStream`等流操作来处理上传的文件。例如,将文件保存到服务器上的特定位置: ```c# [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile file) { if (file != null && file.Length > 0) { using (var stream = new FileStream("<目标文件路径>", FileMode.Create)) { await file.CopyToAsync(stream); } } return Ok(); } ``` 3. 如果您需要对文件进行验证,可以使用文件的属性,如文件名、大小、类型等。例如: ```c# [HttpPost("upload")] public async Task<IActionResult> UploadFile(IFormFile file) { if (file != null && file.Length > 0) { // 验证文件属性 if (file.Length > 10 * 1024 * 1024) { return BadRequest("文件大小不能超过10MB。"); } // 验证文件类型 if (!IsFileSupported(file)) { return BadRequest("不支持的文件类型。"); } // 文件保存逻辑... } return Ok(); } private bool IsFileSupported(IFormFile file) { // 检查文件类型的逻辑,可以根据需要自定义 // 例如:return file.ContentType.StartsWith("image/"); } ``` 4. 最后,通过发送POST请求,将文件作为表数据通过multipart/form-data编码进行上传。您可以选择使用工具,例如Postman,或通过前端页面实现此操作。 以上是使用.NET Core API进行文件上传的基本步骤,您可以根据需要进行进一步的自定义和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值