C#MVC input文件上传

这篇博客介绍了如何使用ASP.NET进行文件上传操作,并通过HTTP POST方式将文件内容发送到远程服务器。文章详细展示了HTML表单、后端处理代码以及样式调整。在后端,文件首先被保存到本地,然后转换为二进制数据,通过自定义请求头以multipart/form-data格式发送到指定URL。整个过程涉及文件读取、内容编码以及HTTP请求的构建和发送。
摘要由CSDN通过智能技术生成

html代码

<form id="scwj" class="layui-form" action="/TempDeb/FileUpload" method="post" enctype="multipart/form-data">
<input type="text" id="lldz" name="lldz" value="@ViewBag.linkaddress" hidden="hidden" />
<input class="layui-btn" accept=".bin,.txt" type="file" id="File" name="File"  />
</form>

后台代码

public ActionResult FileUpload(string lldz)
{
    //Request.Files["File"].SaveAs(Request.MapPath("~/upload/") + Request.Files["File"].FileName);
    //int fileCount = Request.Files.Count; //上传数量
    //double fileSize = Request.Files["File"].ContentLength; //文件大小(字节)
    //string fileName = Request.Files["File"].FileName; //文件名
    //string fileType = Request.Files["File"].ContentType;//文件类型
    //string fileExt = System.IO.Path.GetExtension(fileName); //文件扩展后缀名
    //return Content($"上传数量:{fileCount} 文件名:{fileName} 文件类型:{fileType} 文件格式:{fileExt}");
    HttpPostedFileBase file = Request.Files["File"];
    if (file != null)
    {
        string filePath = Path.Combine(HttpContext.Server.MapPath("/upload"), Path.GetFileName(file.FileName));
        file.SaveAs(filePath);

        Response.Write("<script>alert('上传成功');</script>");
    }
    else
    {
        Response.Write("<script>alert('上传失败'); </script>");
    }

    return Redirect("/TempDeb/RemoteDefendOper?linkaddress="+ lldz);
}

样式调整,源码
在这里插入图片描述

<input class="layui-btn" accept=".bin" type="file" id="File" name="File" onchange="document.getElementById('wjmc').value = this.value;" style="opacity:1;width:1px;height:1px;position:absolute;left:10px;" />
隐藏此标签
document.getElementById("File").click();
使用自定义按钮单击调用,这个事件

后台替代form提交

Request.Files["File"].SaveAs(Request.MapPath("~/upload/") + Request.Files["File"].FileName);//上传到服务器
try
{
    //HttpPostedFileBase file = Request.Files["File"];
    string url = @"http://ip:8070/MasterAPI/WritePostFile?linkAddress="+lldz;
    string modelId = "4f1e2e3d-6231-4b13-96a4-835e5af10394";
    string updateTime = "2020-10-13 11:17:15";
    string encrypt = "f933797503d6e2c36762428a280e0559";

    string filePath = Request.MapPath("~/upload/") + Request.Files["File"].FileName;
    string fileName = Request.Files["File"].FileName;

    byte[] fileContentByte = new byte[1024]; // 文件内容二进制

    #region 将文件转成二进制

    FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
    fileContentByte = new byte[fs.Length]; // 二进制文件
    fs.Read(fileContentByte, 0, Convert.ToInt32(fs.Length));
    fs.Close();

    #endregion


    #region 定义请求体中的内容 并转成二进制

    string boundary = "ceshi";
    string Enter = "\r\n";

    string modelIdStr = "--" + boundary + Enter
            + "Content-Disposition: form-data; name=\"modelId\"" + Enter + Enter
            + modelId + Enter;

    string fileContentStr = "--" + boundary + Enter
            + "Content-Type:application/octet-stream" + Enter
            + "Content-Disposition: form-data; name=\"fileContent\"; filename=\"" + fileName + "\"" + Enter + Enter;

    string updateTimeStr = Enter + "--" + boundary + Enter
            + "Content-Disposition: form-data; name=\"updateTime\"" + Enter + Enter
            + updateTime;

    string encryptStr = Enter + "--" + boundary + Enter
            + "Content-Disposition: form-data; name=\"encrypt\"" + Enter + Enter
            + encrypt + Enter + "--" + boundary + "--";


    var modelIdStrByte = Encoding.UTF8.GetBytes(modelIdStr);//modelId所有字符串二进制

    var fileContentStrByte = Encoding.UTF8.GetBytes(fileContentStr);//fileContent一些名称等信息的二进制(不包含文件本身)

    var updateTimeStrByte = Encoding.UTF8.GetBytes(updateTimeStr);//updateTime所有字符串二进制

    var encryptStrByte = Encoding.UTF8.GetBytes(encryptStr);//encrypt所有字符串二进制


    #endregion


    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
    request.Method = "POST";
    request.ContentType = "multipart/form-data;boundary=" + boundary;

    Stream myRequestStream = request.GetRequestStream();//定义请求流

    #region 将各个二进制 安顺序写入请求流 modelIdStr -> (fileContentStr + fileContent) -> uodateTimeStr -> encryptStr

    myRequestStream.Write(modelIdStrByte, 0, modelIdStrByte.Length);

    myRequestStream.Write(fileContentStrByte, 0, fileContentStrByte.Length);
    myRequestStream.Write(fileContentByte, 0, fileContentByte.Length);

    myRequestStream.Write(updateTimeStrByte, 0, updateTimeStrByte.Length);

    myRequestStream.Write(encryptStrByte, 0, encryptStrByte.Length);

    #endregion

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();//发送

    Stream myResponseStream = response.GetResponseStream();//获取返回值
    StreamReader myStreamReader = new StreamReader(myResponseStream, Encoding.GetEncoding("utf-8"));

    string retString = myStreamReader.ReadToEnd();

    myStreamReader.Close();
    myResponseStream.Close();
}
catch (Exception ex)
{
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xcLeigh

万水千山总是情,打赏两块行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值