前台Html上传文件,后台使用.net接收文件

前台使用的是html一个from表单里面一个file的input框

如下:

<form enctype= "multipart/form-data" ID="form1" runat="server">
	<input type="file" id="file" name="file" runat="server">
	<input type="file" value="提交" οnclick="uploadFile()">
</form>	

这里没有使用submit按钮进行提交操作,使用的是平常的button按钮进行上传,因为submit会进行刷新表单,所以不用submit,你也可以使用submit,这里演示的使用的是button

对应的js如下:

function uploadFile(){
	var ofile = $("#file").get(0).files[0];
	var formData = new FormData();
	if(!ofile){
	     $.messager.alert('提示','请上传文件!','info');
	     return; 
	 }
	 var size = ofile.size / 1024 / 1024;
	 if (size > 5) {
		$.messager.alert('提示','文件不能大于5M','info');
		 return;
	 }
		       
	formData.append("file", ofile);//这个是文件,这里只是演示上传了一个文件,如果要上传多个的话将[0]去掉
	formData.append("F_ID", $("#F_ID").val());//这个是上传的其他参数
	formData.append("F_NAME", fNameHL);
			   
			
	 $.ajax({
	 	 url: api_address+'api/Test/Test',
		 type: "POST",
		 data: formData, 
		 cache: false,//不需要缓存
		 processData: false,
		 contentType: false,
		 success: function(data){
			 var ss= $.parseJSON(data);
			 if(ss.MSG == 'OK') {
				$.messager.alert('提示','保存成功!','info');
				
			 }
		}
	});
}

后台对应方法:

[Route("Test")]
      	[HttpPost]
        public HttpResponseMessage  Test(HttpRequestMessage request)
        {
            try
            {
                string reqData = "";
                string F_ID = HttpContext.Current.Request["F_ID"];
                string F_NAME = HttpContext.Current.Request["F_NAME"];
                
                HttpFileCollection files = HttpContext.Current.Request.Files;
                FileClass fileClass = new FileClass();
                
                //foreach (string key in files.AllKeys)//如需上传多个文件则需要for循环处理
                //{
                HttpPostedFile file = null;
                if (files.Count != 0) {
                        file = files[0];//这里只有一个文件 
                        if (string.IsNullOrEmpty(file.FileName) == false)
                        {
                            file.SaveAs(HttpContext.Current.Server.MapPath("/Test/LTime/") + F_NAME);
                            
                            string[] stringPC = { F_ID, F_NAME, F_VERSION };
                            bool b = fileClass.SaveFile(stringPC, ref reqData);//对数据库进行操作
                                if (b)
                                {
                                    return Request.CreateResponse(HttpStatusCode.OK, reqData);
                                }
                                else
                                {
                                    if (System.IO.File.Exists(HttpContext.Current.Server.MapPath("/Test/LTime/") + F_NAME))
                                    {
                                        System.IO.File.Delete(HttpContext.Current.Server.MapPath("/Test/LTime/") + F_NAME);
                                    }
                                    return Request.CreateResponse(HttpStatusCode.OK, reqData);
                                }
                        }
                        else
                        {
                            return Request.CreateResponse(HttpStatusCode.BadRequest, "Error");
                        }
                    
                }
                //}
                
            }
            catch (Exception ex) {
                return Request.CreateResponse(HttpStatusCode.BadRequest, ex.Message.ToString());
            }
            
        }




  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
.NET Core 6中使用SignalR向前端发送消息是可行的。SignalR是一个实时通信库,可以通过WebSocket、Server-Sent Events(服务器推送事件)以及长轮询等方式,提供实时双向通信能力。 首先,你需要安装并配置SignalR。可以通过NuGet包管理器或在项目文件中手动添加相关依赖项来安装SignalR及其所需组件。 接下来,在后台代码中,你需要创建一个SignalR的Hub类,它将用于与前端进行通信。你可以在Hub类中定义服务器端的方法,以便在后台代码中触发并发送消息给前端实例。例如: ```csharp using Microsoft.AspNetCore.SignalR; public class MyHub : Hub { public void SendMessage(string message) { Clients.All.SendAsync("ReceiveMessage", message); } } ``` 在这个例子中,我们定义了一个名为`SendMessage`的服务器端方法。当调用这个方法时,它会将接收到的消息通过`ReceiveMessage`事件发送到所有连接的前端实例上。 然后,在前端代码中,你需要通过JavaScript或其他前端框架来连接到SignalR Hub,并订阅服务器端发送的事件,以便接收消息。例如: ```javascript const connection = new signalR.HubConnectionBuilder() .withUrl("/myHubUrl") .build(); connection.on("ReceiveMessage", (message) => { // 处理接收到的消息 console.log(message); }); connection.start() .then(() => { // 连接成功,在此处可以调用后台方法发送消息(如button click事件等) }) .catch((error) => { // 处理连接错误 console.error(error); }); ``` 在这个例子中,我们创建了一个SignalR连接,并在连接成功后订阅了`ReceiveMessage`事件,以便在接收到服务器端消息时进行处理。你可以在连接成功后的回调函数中调用后台方法,发送消息给前台实例。 最后,你可以通过调用后台方法来发送消息到前端实例,例如: ```csharp public class HomeController : Controller { private readonly IHubContext<MyHub> _hubContext; public HomeController(IHubContext<MyHub> hubContext) { _hubContext = hubContext; } public async Task<IActionResult> SendMessageToClients(string message) { await _hubContext.Clients.All.SendAsync("ReceiveMessage", message); return Ok(); } } ``` 在这个例子中,我们在控制器中注入了`IHubContext<MyHub>`,它允许我们调用与`MyHub`关联的方法,并向所有连接的前端实例发送消息。 综上所述,你可以通过SignalR在.NET Core 6中实现后台前台实例发送消息的功能。具体实现细节可能会根据你的项目需求而有所不同,以上只是一个简单的示例。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值