首页 > 其他分享 >.net WebUploader 分片上传

.net WebUploader 分片上传

时间:2023-06-08 18:11:43浏览次数:37  
标签:文件 WebUploader file 分片 var net 上传 源码 下载

 以ASP.NET Core WebAPI 作后端 API ,用 Vue 构建前端页面,用 Axios 从前端访问后端 API ,包括文件的上传和下载。

 

准备文件上传的API

 

#region 文件上传  可以带参数

        [HttpPost("upload")]

        public JsonResult uploadProject(IFormFile file, string userId)

        {

            if (file != null)

            {

                var fileDir = "D:\\aaa";

                if (!Directory.Exists(fileDir))

                {

                    Directory.CreateDirectory(fileDir);

                }

                //文件名称

                string projectFileName = file.FileName;

 

                //上传的文件的路径

                string filePath = fileDir + $@"\{projectFileName}";

                using (FileStream fs = System.IO.File.Create(filePath))

                {

                    file.CopyTo(fs);

                    fs.Flush();

                }

                return Json("ok");

            }else{

                return Json("no");

            }

        }

        #endregion

前端vue上传组件  ( 利用Form表单上传 )

 

<template>

<div>

    <form>

        <input type="text" value="" v-model="projectName" placeholder="请输入项目名称">

        <input type="file" v-on:change="getFile($event)">

        <button v-on:click="submitForm($event)">上传</button>

    </form>

</div>

</template>

 

<script>

///这个组件是用于上传bdls文件的组件

export default {

  data() {

    return {

      uploadURL: "/Home/Upload",

      projectName: "",

      file: ""

    };

  },

  methods: {

    getFile(event) {

      this.file = event.target.files[0];

      console.log(this.file);

    },

    submitForm(event) {

      event.preventDefault();

      let formData = new FormData();

      formData.append("file", this.file);

 

      let config = {

        headers: {

          "Content-Type": "multipart/form-data"

        }

      };

 

      this.$http

        .post(this.uploadURL, formData, config)

        .then(function(response) {

          if (response.status === 200) {

            console.log(response.data);

          }

        });

    }

  }

};

</script>

 

<style lang="scss" scoped>

</style>

用 element-ui 的 Upload组件上传文件

 

http://element-cn.eleme.io/#/zh-CN/component/upload

 

<template>

<div>

    <el-upload

      class="upload-css"

      :file-list="uploadFiles"

      ref="upload"

      :on-success="upLoadSuccess"

      :on-error="upLoadError"

      :action="uploadURL"

      :auto-upload="false">

        <el-button slot="trigger" size="small" type="primary">选取文件</el-button>

        <el-button style="margin-left: 10px;" size="small" type="success" @click="submitUpload">上传到服务器</el-button>

    </el-upload>

</div>

</template>

 

<script>

import Vue from "vue";

import { Upload, Button } from "element-ui";

Vue.use(Upload);

Vue.use(Button);

 

export default {

  props: [],

  data() {

    return {

      projectName: "",

      //uploadURL: "/project/upload?a=1",

      uploadFiles: [] //上传的文件列表

    };

  },

  computed: {

    //文件的上传路径

    //附带用户id和项目名称

    uploadURL: function() {

      //var userId = this.$store.state.userId;

      return "/project/upload?userId=" + 1;

    }

  },

  methods: {

    //文件上传

    submitUpload() {

      this.$refs.upload.submit();

    },

    //文件上传成功时的钩子

    upLoadSuccess(response, file, fileList) {

      if (response == "ok") {

        console.log(response + "已上传" + file);

        console.log("项目添加成功");

      } else {

        console.log("项目添加失败");

      }

    },

    //文件上传失败时的钩子

    upLoadError(response, file, fileList) {

      console.log("项目添加失败");

    }

  }

};

</script>

 

<style lang="scss" scoped>

</style>

文件下载

普通的文件下载方式是访问一个后台文件流地址,直接生成对应的文件,下载即可,地址栏中也可携带一些控制参数,但是无法通过header传递参数。

 

两种文件下载方式,一种是,直接返回file文件,利用浏览器的下载功能。但是这种没有发现可以在发送请求的时候携带token;另一种是利用 Axios 发送下载文件的请求,可以设置header头,可以携带token ,但是response-type是blob类型的。

 

第一种:

后端API:

 

public FileResult downloadRequest()

        {

            //var addrUrl = webRootPath + "/upload/thumb.jpg";

            var addrUrl = "D:/aaa/thumb.jpg";

 

            var stream = System.IO.File.OpenRead(addrUrl);

 

            string fileExt = Path.GetExtension("thumb.jpg");

 

            //获取文件的ContentType

 

            var provider = new FileExtensionContentTypeProvider();

 

            var memi = provider.Mappings[fileExt];

 

            return File(stream, memi, Path.GetFileName(addrUrl));

        }

前端利用浏览器的功能url直接返回文件

 

下载文件...

...

...

 

downloadRequest() {   

    let url = "Home/downloadRequest"; //可以在路径中传递参数

    window.location.href = url;

 },

第二种

后端api ,两个api的返回类型不同,asp.net core 文件下载常用的有FileResult 、FileContentResult 、 FileStreamResult。

 

public FileContentResult downloadRequest1()

        {

            //string webRootPath = _hostingEnvironment.WebRootPath;

            //var addrUrl = webRootPath + "/upload/thumb.jpg";

            var addrUrl = "D:/aaa/wyy.exe";

 

            /*var stream = System.IO.File.OpenRead(addrUrl);

 

            string fileExt = Path.GetExtension("thumb.jpg");

 

            //获取文件的ContentType

 

            var provider = new FileExtensionContentTypeProvider();

 

            var memi = provider.Mappings[fileExt];

 

            return File(stream, memi, Path.GetFileName(addrUrl));*/

 

            //return stream;

            byte[] fileBytes = System.IO.File.ReadAllBytes(addrUrl);

            string fileName = "wyy.exe";

            return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName); //关键语句

        }

前端页面

 

blob(用来存储二进制大文件)

 

<el-button type="primary" v-on:click="downloadRequest1">下载文件11</el-button>

...

...

...

    downloadRequest1() {

      axios({

        // 用axios发送post请求

        method: "post",

        url: "Home/downloadRequest1", // 请求地址 ,也可以传递参数

        headers: {

          //可以自定义header

          gggg: "gggggggggggggggggggggggggggggggggggggggggggggggggggg"  //可以携带token

        },

        responseType: "blob" // 表明返回服务器返回的数据类型

      }).then(res => {

        // 处理返回的文件流

        //主要是将返回的data数据通过blob保存成文件

        var content = res.data;

        var blob = new Blob([content]);

        var fileName = "wyy.exe"; //要保存的文件名称

        if ("download" in document.createElement("a")) {

          // 非IE下载

          var elink = document.createElement("a");

          elink.download = fileName;

          elink.style.display = "none";

          elink.href = URL.createObjectURL(blob);

          document.body.appendChild(elink);

          elink.click();

          URL.revokeObjectURL(elink.href); // 释放URL 对象

          document.body.removeChild(elink);

        } else {

          // IE10+下载

          navigator.msSaveBlob(blob, fileName);

        }

        console.log(res);

      });

    }

第三种

就是用用up6控件,此控件支持mac、windos、Linux,因为太长就不发了

效果展示:

​编辑

​编辑

​编辑

​编辑

 

视频演示:

 

windows控件安装,,linux-deb控件包安装,linux-rpm控件包安装,php7测试,php5测试,vue-cli-测试,asp.net-IIS测试,asp.net-阿里云(oss)测试,asp.net-华为云(obs)测试,jsp-springboot测试,ActiveX(x86)源码编译,ActiveX(x64)源码编译,Windows(npapi)源码编译,macOS源码编译,Linux(x86_64)源码编译,Linux(arm)源码编译,Linux(mips-uos)源码编译,Linux(mips-kylin-涉密环境)源码编译,sm4加密传输,压缩传输,

示例下载地址

源代码文档

asp.net源码下载jsp-springboot源码下载jsp-eclipse源码下载jsp-myeclipse源码下载php源码下载csharp-winform源码下载vue-cli源码下载c++源码下载

详细配置信息及思路

标签:文件,WebUploader,file,分片,var,net,上传,源码,下载
From: https://www.cnblogs.com/songsu/p/17467318.html

相关文章

  • Static 单例中 QNetworkAccessManager 的释放问题
    结论:QNetworkAccessManager以Static对象作为父对象时,需要注意在main函数return前释放,否则可能导致Qt框架内部的重复释放引发崩溃。原因:Static对象是在Main函数return后才释放的,此时,已经QApplication已失效 参考https://bugreports.qt.io/browse/QTBUG-82984htt......
  • 如何在.net6webapi中实现自动依赖注入
    IOC/DIIOC(InversionofControl)控制反转:控制反正是一种设计思想,旨在将程序中的控制权从程序员转移到了容器中。容器负责管理对象之间的依赖关系,使得对象不再直接依赖于其他对象,而是通过依赖注入的方式来获取所需的资源。ID(DependencyInjection)依赖注入:他是IOC的具体实现方式之......
  • java 访问ingress https报错javax.net.ssl.SSLHandshakeException: Received fatal al
    一、报错及部署环境Java程序访问测试域名https方法正常,访问生产域名https域名报错,报错如下javax.net.ssl.SSLHandshakeException:Receivedfatalalert:protocol_version测试环境使用KubeSphereingress生产环境使用阿里云ACK服务的ingress配置二、问题原因客户端......
  • .NET Core 实现 Windows 系统 Development、Staging、Production 三种环境的无感部署
    阅读目录〇、前言一、配置文件二、程序读取配置1.配置文件信息读取实现2.关于本机测试三、Windows服务器配置回到顶部〇、前言日常开发中,程序的环境切换是相当频繁的了,如果不同环境中的某些参数不同,那就需要每次编辑之前手动进行修改,比较麻烦,效率低下。本文......
  • .net core 因路径原因导致的JSON解析错误
    因解析json配置文件导致的错误:JsonReaderException:'0xEF'isaninvalidescapablecharacterwithinaJSONstring.Thestringshouldbecorrectlyescaped.LineNumber如何解决?{  "path":"D:\工作资料\技术资料"}改为{   "path":"D:......
  • Nginx大文件分片上传/多线程上传
    ​ 前言一、SpringMVC简介1.1、SpringMVC引言为了使Spring有可插入的MVC架构,SpringFrameWork在Spring基础上开发SpringMVC框架,从而在使用Spring进行WEB开发时可以选择使用Spring的SpringMVC框架作为web开发的控制器框架。 spring知识图谱分享:1.2、SpringMV......
  • 跟着源码学IM(十一):一套基于Netty的分布式高可用IM详细设计与实现(有源码)
    本文由will分享,个人博客zhangyaoo.github.io,原题“基于Netty的IM系统设计与实现”,有修订和重新排版。1、引言本文将要分享的是如何从零实现一套基于Netty框架的分布式高可用IM系统,它将支持长连接网关管理、单聊、群聊、聊天记录查询、离线消息存储、消息推送、心跳、分布式唯......
  • .Net:对接微信小程序进行授权操作
    原来的写法,使用node.js  其实就是小程序端访问接口,传来一个code参数,接下来后台拿到code之后可以根据code、appid、secret获取session_key和openid,拿到这两个之后后端的工作基本就结束了,可以参考官网接口迁移之后的写法,使用.Net,代码就怎么简单怎么来///<summary>......
  • Kubernetes 集群管理:Kurator or Kubespray
    摘要:Kubespray和Kurator就是这类开源工具的典型代表。本文将对这两款工具进行比较。本文分享自华为云社区《Kubernetes集群管理:KuratororKubespray-华为云云原生团队》,作者:云容器大未来。随着云计算技术的飞速发展,Kubernetes已经成为了容器编排领域的事实标准。用户可......
  • net-core-PeriodicTimer
    一在.NET6中引入了新Timer:System.Threading.PeriodicTimer,它和之前的Timer相比,最大的区别就是新的PeriodicTimer事件处理可以方便地使用异步,消除使用callback机制减少使用复杂度。publicclassBackgroundTask{privateTask?_timerTask;privatereadonlyPeriodic......