NetCore开发的分布式文件上传系统

本文介绍了如何解决大文件上传面临的问题,如超时和效率低下,提出了一种分布式文件上传系统的解决方案。该系统基于.Net Core构建,支持分块上传和JWT权限控制,可在多种平台上运行。项目包括Web和控制台上传的示例,并提供了详细的配置和使用说明。
摘要由CSDN通过智能技术生成

日常如果是上传一些小文件,在程序实现中,我们都是直接上传,一般都没什么问题。如果 针对大文件上传的业务中,就会面临着:

1、网速问题,导致文件上传超时,而导致失败。

2、效率问题,上传大文件等待时间过长,如果是需要上传多个,就会更慢。

3、体验问题,用户无法预知上传还需花费的时间,系统没有及时反馈,用户无法判断文件是否还在上传,还是断开。

这时候就需要采用分布式文件上传系统。

项目简介

这是一个基于.Net Core 构建的简单、跨平台分布式文件上传系统,支持分块上传、多个项目同时上传、接口权限控制采用JWT机制。

技术架构

1、跨平台:这是基于.Net Core开发的系统,可以部署在Docker, Windows, Linux, Mac。

2、.Net 2.1 + Jwt + simple-uploader

项目结构

项目分为分块上传与一般上传Demo,Web、控制台上传Demo。ufs项目是分布式文件上传的统一接口,ufs会根据配置把上传的文件发到ufs.node节点,ufs.node会把上传成功路径返回给ufs并存储,用户访问的时候,ufs会访问对应节点返回资源。

UploadServer为一般文件上传接口,UploadServer.FrontEndDemo为Web上传文件Demo。

使用

1、配置

配置允许上传域名、服务接口地址、允许的文件格式、文件大小、存储路径等信息。

{
  
  "AllowedHosts": "*",
  "urls": "http://localhost:6001",
  "uploadServer": {
  
    "rootUrl": "http://localhost:6001",
    "entryPoint1": "/upload",
    "entryPoint2": "/chunkUpload",
    "virtualPath": "",
    "physicalPath": "/Users/loogn/Desktop/uploader",
    "appendMimes": ".htm3:text/html;",
    "responseCache": 604800,
    "jwtSecret": "1234561234",
    "limitSize": "20mb",
    "allowExts": ".txt;.jpg;.jpeg;.png;.doc;.docx;.xls;.xlsx;.ppt;.pptx;.pdf",
    "apps": {
  
      "default": {
  
        "allowOrigins": "",
        "enableThumbnail": true,
        "limitExts": ".exe;",
        "thumbnailExts": ".jpg;.jpeg;.png;"
      },
      "app1": {
  
        "allowOrigins": "*"
      }
    }
  }
}

2、前端

一般上传代码

$("#file1").change(function () {
  
        $.ajaxFileUpload({
  
            fileElementId: 'file1',
            url: 'http://localhost:6001/upload',
            dataType: 'text',
            //
            success: function (data) {
  
                console.log("上传成功:", data);
            },
            data: {
  
                "jwt": jwt
            }
        });
    });

分块上传

var uploader = new Uploader({
  
        target: 'http://localhost:6001/chunkupload',
        headers: {jwt: jwt}
    });


    uploader.assignBrowse(document.getElementById('browseButton'));




    //uploader.assignBrowse(document.getElementById('folderButton'), true);


    //
    // 文件添加 单个文件
    uploader.on('fileAdded', function (file, event) {
  
        console.log("fileAdded:", file, event)
    });
    // 单个文件上传成功
    uploader.on('fileSuccess', function (rootFile, file, message) {
  


        console.log("fileSuccess:", rootFile, file, message)
    });
    // 根下的单个文件(文件夹)上传完成
    uploader.on('fileComplete', function (rootFile) {
  


        console.log("fileComplete:", rootFile)
    });
    // 某个文件上传失败了
    uploader.on('fileError', function (rootFile, file, message) {
  
        console.log("fileError:", rootFile, file, message)
    });

3、后端

一般上传

 public async Task InvokeAsync(HttpContext context, RequestDelegate next)
        {
  
            context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
            context.Response.Headers.Add("Access-Control-Allow-Headers", "content-type,jwt,origin");
       
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值