实现ASP.NET中FileUpload多文件上传

这里附加一下上传单个文件的CS代码:

protected void upload_Click(object sender, EventArgs e)
    {

        
if (upfile.HasFile)
        {
            
string fname = upfile.PostedFile.FileName;
            
int fi = fname.LastIndexOf("\\"+ 1;
            
string filename = fname.Substring(fi);
            upfile.PostedFile.SaveAs(Server.MapPath(
"upload\\" + filename));
            Response.Write(
"<script>alert('报名表上传成功!');</script>");
        }
        
else
        {
            Response.Write(
"<script>alert('请选择您要上传的报名表!');</script>");
        }

    }

下面是上传多个文件的全部代码,第一次实现这样的功能,难免有考虑不周全的地方,还望高手见到后指教!

【显示页面代码】:

在<head></head>标签中插入如下脚本代码:

 

<script type="text/javascript">
         
function addfile()
         {
          
var uploadfiles=document.getElementById("uploadfiles"),
    str 
= '<INPUT type="file" size="50" NAME="File">';
          uploadfiles.innerHTML
+=str;
         }
</script>

 

在页面主体部分插入:

 

<div>
     
<id="uploadfiles"><input type="file" size="50" name="file"></p>
     
<input onclick="addfile()" type="button" value="增加">
     
<asp:button id="uploadbutton" Text="开始上传" Runat="server"></asp:button>
</div>

 

【C#代码】:

添加using指令:using System.Text.RegularExpressions;

在protected void Page_Load(object sender, EventArgs e){}中插入如下代码:

HttpFileCollection files = HttpContext.Current.Request.Files;
        
//状态信息
        System.Text.StringBuilder strMsg = new System.Text.StringBuilder();
        
for (int ifile = 0; ifile < files.Count; ifile++)
        {
            HttpPostedFile postedfile 
= files[ifile];
            
string filename, fileExt;
            filename 
= System.IO.Path.GetFileName(postedfile.FileName);    //获取文件名
            fileExt = System.IO.Path.GetExtension(filename);    //获取文件后缀

            
int MaxAllowUploadFileSize = Convert.ToInt32(System.Configuration.ConfigurationSettings.
AppSettings[
"MaxAllowUploadFileSize"]);     //定义允许上传文件大小
            if (MaxAllowUploadFileSize == 0) { MaxAllowUploadFileSize = 26500; }
            
string allowexts = System.Configuration.ConfigurationSettings.AppSettings["AllowUploadFileType"]; 
 
//定义允许上传文件类型
            if (allowexts == "") { allowexts = "doc|docx|rar|xls|xlsx|txt"; }
            Regex allowext 
= new Regex(allowexts);

            
if (postedfile.ContentLength < MaxAllowUploadFileSize && allowext.IsMatch(fileExt)) //检查文件大小及扩展名
            {
                postedfile.SaveAs(Server.MapPath(
"upload\\" + filename + fileExt));    //upload为与本页面同一目录,可自行修改
            }
            
else
            {
                Response.Write(
"<script>alert('不允许上传类型" + fileExt + "或文件过大')</script>");
            }
        }

【Web.config中代码】:

<appSettings>
    
<add key="MaxAllowUploadFileSize" value="256000" />
    
<add key="AllowUploadFileType" value="doc|docx|rar|xls|xlsx|txt" />
</appSettings>

转载于:https://www.cnblogs.com/ret00100/archive/2009/10/19/1585859.html

/* USER CODE BEGIN Header */ /** ****************************************************************************** * @file : main.c * @brief : Main program body ****************************************************************************** * @attention * * <h2><center>© Copyright (c) 2025 STMicroelectronics. * All rights reserved.</center></h2> * * This software component is licensed by ST under BSD 3-Clause license, * the "License"; You may not use this file except in compliance with the * License. You may obtain a copy of the License at: * opensource.org/licenses/BSD-3-Clause * ****************************************************************************** */ /* USER CODE END Header */ /* Includes ------------------------------------------------------------------*/ #include "main.h" #include "usart.h" #include "gpio.h" /* Private includes ----------------------------------------------------------*/ /* USER CODE BEGIN Includes */ #include "dht11.h" #include "stdio.h" #include <stdlib.h> /* USER CODE END Includes */ /* Private typedef -----------------------------------------------------------*/ /* USER CODE BEGIN PTD */ /* USER CODE END PTD */ /* Private define ------------------------------------------------------------*/ /* USER CODE BEGIN PD */ /* USER CODE END PD */ /* Private macro -------------------------------------------------------------*/ /* USER CODE BEGIN PM */ /* USER CODE END PM */ /* Private variables ---------------------------------------------------------*/ /* USER CODE BEGIN PV */ #include "string.h" #define RxMaxLen 100 #define timeout 5000 uint8_t RxBuf[100]={0}; uint32_t startTick = 0; char atMode[] = "AT+CWMODE=1\r\n"; //设置wifi工作模式的AT指令 char atJap[] = "AT+CWJAP=\"HONOR 90\",\"041028ly\"\r\n"; // wifi连接热点的AT指令 char atTcp[] = "AT+CIPSTART=\"TCP\",\"121.37.241.174\",8600\r\n"; //wifi连接云端服务器的AT指令 char atSendConn[] = "AT+CIPSEND=88\r\n"; //wifi上传数据字节数的AT指令 char atJsonConn[] = "{\"t\":1,\"device\":\"esp8266_199\",\"key\":\"39a2825123ad4ff8a4779cbd5fca31b7\",\"ver\":\"v0.0.0.0\"}\r\n"; //wifi连接设备的JSON数据 AT指令 char atSendSens[] = "AT+CIPSEND=53\r\n"; ////wifi上传数据字节数的AT指令 //char atJsonSens[] = "{\"t\":3,\"datatype\":1,\"datas\":{\"temp\":\"12\"},\"msgid\":123}\r\n"; ////wifi给传感器上报数据的JSON AT指令 //给wifi发送AT指令 void SenAtCom(char *str) { HAL_UART_Transmit(&huart3,(uint8_t *)str,strlen(str),0xffff); } //wifi连接热点函数 void ProjectConn() { SenAtCom(atMode); HAL_Delay(50); SenAtCom(atJap); startTick= HAL_GetTick(); //获了系统当前运行时间 while ((HAL_GetTick() - startTick) < timeout) //当所用时间小于退出时间 { if(strstr((char *)RxBuf,"GOT IP") == RESET) //如没有收到“获得IP”,即如没有连接到热点 { HAL_Delay(10); //延时 SenAtCom(atJap); //继续连接热点 } else { break; //连接到了,就退出。 } } } //wifi连接服务器函数 void ServerConn() { SenAtCom(atMode); HAL_Delay(50); SenAtCom(atJap); HAL_Delay(2000); SenAtCom(atTcp); HAL_Delay(50); } //串口3接收中断回调处理函数,该函数可以处理不定长度的接收中断 void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size) { if(huart == &huart3) { HAL_UART_Transmit(&huart1,RxBuf,sizeof(RxBuf),0xffff); //把串口3接收到的wifi回复,转发到串口1,可以通串口1打印到屏幕 } memset(RxBuf,0,RxMaxLen); HAL_UARTEx_ReceiveToIdle_IT(&huart3, RxBuf, RxMaxLen); //接收串口3收到的信息,并再次开启串口3的接收中断 } /* USER CODE END PV */ /* Private function prototypes -----------------------------------------------*/ void SystemClock_Config(void); /* USER CODE BEGIN PFP */ /* USER CODE END PFP */ /* Private user code ---------------------------------------------------------*/ /* USER CODE BEGIN 0 */ DHT11_Data_TypeDef dht11_rec_buf[]={0,0,0,0,0,0.0,0.0}; int fputc(int ch ,FILE *f) { HAL_UART_Transmit(&huart1,(uint8_t *)&ch,1,0xffff); return ch; } typedef struct { float temperature; } DHT11RecBuf; /* USER CODE END 0 */ /** * @brief The application entry point. * @retval int */ int main(void) { /* USER CODE BEGIN 1 */ /* USER CODE END 1 */ /* MCU Configuration--------------------------------------------------------*/ /* Reset of all peripherals, Initializes the Flash interface and the Systick. */ HAL_Init(); /* USER CODE BEGIN Init */ DHT11RecBuf *dht11_rec_buf = (DHT11RecBuf*)malloc(sizeof(DHT11RecBuf)); /* USER CODE END Init */ /* Configure the system clock */ SystemClock_Config(); /* USER CODE BEGIN SysInit */ /* USER CODE END SysInit */ /* Initialize all configured peripherals */ MX_GPIO_Init(); MX_USART1_UART_Init(); MX_USART3_UART_Init(); /* USER CODE BEGIN 2 */ DHT11_Init(); HAL_UARTEx_ReceiveToIdle_IT(&huart3, RxBuf, RxMaxLen); //开启串口3的接收中断,仅一次 ProjectConn(); //wifi连接热点 /* USER CODE END 2 */ /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { char atJsonSens[128]; sprintf(atJsonSens, "{\"t\":3,\"datatype\":1,\"datas\":{\"temp\":\"%.2f\"},\"msgid\":123}\r\n", dht11_rec_buf->temperature); SenAtCom(atTcp); //连接云端服务器 HAL_Delay(100); SenAtCom(atSendConn); //发送上传数据的字节数 HAL_Delay(100); SenAtCom(atJsonConn); //连接云端服务器上的设备 HAL_Delay(2000); SenAtCom(atSendSens); //发送上传数据的字节数(要与发送的JSON数据字节数完全一致) HAL_Delay(100); SenAtCom(atJsonSens); //上传传感器数据 HAL_Delay(3000); /* USER CODE END WHILE */ free(dht11_rec_buf); /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } /** * @brief System Clock Configuration * @retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the CPU, AHB and APB busses clocks */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE; RCC_OscInitStruct.HSEState = RCC_HSE_ON; RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE; RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB busses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } } /* USER CODE BEGIN 4 */ /* USER CODE END 4 */ /** * @brief This function is executed in case of error occurrence. * @retval None */ void Error_Handler(void) { /* USER CODE BEGIN Error_Handler_Debug */ /* User can add his own implementation to report the HAL error return state */ /* USER CODE END Error_Handler_Debug */ } #ifdef USE_FULL_ASSERT /** * @brief Reports the name of the source file and the source line number * where the assert_param error has occurred. * @param file: pointer to the source file name * @param line: assert_param error line source number * @retval None */ void assert_failed(uint8_t *file, uint32_t line) { /* USER CODE BEGIN 6 */ /* User can add his own implementation to report the file name and line number, tex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ /* USER CODE END 6 */ } #endif /* USE_FULL_ASSERT */ /************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
06-17
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值