c# 批量上传文件,后台使用springboot MultipartFile接收

也是在网上找了很多资料,不过大多数都是传入参数和一个文件,然后进行上传,很少有多个文件上传的,这次就写个c#批量上传文件。

我的后台使用springboot MultipartFile接收参数。

后台springboot实现的restful接口代码,如下(业务逻辑方法iEnrolService.multiIdentifyService(files);就不在给出了),

@PostMapping("/biometric/multiEnrolSpeaker")
    @ResponseBody
    public ResponseTemplate multiIdentifyService(HttpServletRequest request){



        try {
//            MultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
//            MultipartHttpServletRequest multipartRequest = resolver.resolveMultipart(request);

            List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
//            List<MultipartFile> files = multipartRequest.getFiles("file");
            ResponseTemplate result;//= iEnrolService.multiIdentifyService(files);
            return result;
        } catch (Exception e) {
            logger.error("文件转换异常", e);
            return ResponseTemplate.error("文件转换异常");
        }
    }

 

c#中的代码如下,其实也是很大程度上受这篇文章的引导(https://m.jb51.net/article/168695.htm

这篇也可以作为参考(https://www.cnblogs.com/yinq/p/6045995.html

public void uploadFiles(string url, string[] files){               

                Console.WriteLine(files.Length);

                // 设置参数
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                CookieContainer cookieContainer = new CookieContainer();
                request.CookieContainer = cookieContainer;
                request.AllowAutoRedirect = true;
                request.Method = "POST";
                string boundary = DateTime.Now.Ticks.ToString("X"); // 随机分隔线
                request.ContentType = "multipart/form-data;charset=utf-8;boundary=" + boundary;
                const string filePartHeaderTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\n" +
                          "Content-Type: application/octet-stream\r\n\r\n";
                //string boundary = "kenny";          // 边界符
                byte[] beginBoundaryBytes = Encoding.UTF8.GetBytes("--" + boundary + "\r\n");  // 边界符开始。【☆】右侧必须要有 \r\n 。
                byte[] endBoundaryBytes = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n"); // 边界符结束。【☆】两侧必须要有 --\r\n 。
                byte[] newLineBytes = Encoding.UTF8.GetBytes("\r\n"); //换一行
                MemoryStream memoryStream = new MemoryStream();
                List<string> lstFiles = new List<string>();
                foreach (string fileFullName in files)
                {
                    if (File.Exists(fileFullName))
                    {
                        lstFiles.Add(fileFullName);
                    }
                }

                int i = 0;
                foreach (var fileFullName in lstFiles)
                {
                    FileInfo fileInfo = new FileInfo(fileFullName);
                    string fileName = fileInfo.Name;

                    string fileHeaderItem = string.Format(filePartHeaderTemplate, "file", fileName);
                    byte[] fileHeaderItemBytes = Encoding.UTF8.GetBytes(fileHeaderItem);

                    if (i > 0)
                    {
                        // 第一笔及第一笔之后的数据项之间要增加一个换行 
                        memoryStream.Write(newLineBytes, 0, newLineBytes.Length);
                    }
                    memoryStream.Write(beginBoundaryBytes, 0, beginBoundaryBytes.Length);  // 2.1 写入FormData项的开始边界符
                    memoryStream.Write(fileHeaderItemBytes, 0, fileHeaderItemBytes.Length); // 2.2 将文件头写入FormData项中

                    int bytesRead;
                    byte[] buffer = new byte[1024];

                    FileStream fileStream = new FileStream(fileFullName, FileMode.Open, FileAccess.Read);
                    while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0)
                    {
                        memoryStream.Write(buffer, 0, bytesRead);        // 2.3 将文件流写入FormData项中
                    }
                    i++;
                }

                memoryStream.Write(endBoundaryBytes, 0, endBoundaryBytes.Length);    // 2.4 写入FormData的结束边界符

                request.ContentLength = memoryStream.Length;
                Stream requestStream = request.GetRequestStream();
                memoryStream.Position = 0;
                byte[] tempBuffer = new byte[memoryStream.Length];
                memoryStream.Read(tempBuffer, 0, tempBuffer.Length);
                memoryStream.Close();
                requestStream.Write(tempBuffer, 0, tempBuffer.Length);  // 将内存流中的字节写入 httpWebRequest 的请求流中
                requestStream.Close();

                Console.WriteLine("111");
                //发送请求并获取相应回应数据
                HttpWebResponse response = request.GetResponse() as HttpWebResponse;
                //直到request.GetResponse()程序才开始向目标网页发送Post请求
                Stream instream = response.GetResponseStream();
                StreamReader sr = new StreamReader(instream, Encoding.UTF8);
                //返回结果网页(html)代码
                string content = sr.ReadToEnd();
            }

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值