关于Html动态添加上传文件控件inputFile(附件)及清除已选择的文件的几个方法

一、动态添加上传文件控件

  1.   案例一:

  1. <HTML>
  2.     <HEAD>
  3.         <TITLE>上传文件</TITLE>
  4.         <SCRIPT language=javascript type=text/javascript>
  5.         <!--
  6.             var RES_BT_DELETE = "删除";
  7.             var isIE = (navigator.userAgent.indexOf("MSIE") != -1);
  8.             var fileIndex = 0;
  9.             
  10.             function addFile() 
  11.             {
  12.                 var spanId = "filespan";
  13.                 var fileId = "uploadfile" + (fileIndex++);
  14.                 addInputFile(spanId, fileId);
  15.             }
  16.             
  17.             function addInputFile(spanId, fileId) 
  18.             {
  19.                 var span = document.getElementById(spanId);
  20.                 if (span != null) 
  21.                 {
  22.                     var divObj = document.createElement("div"), fileObj, delObj;
  23.                     divObj.id = fileId;
  24.                     
  25.                     if (isIE) 
  26.                     {
  27.                         fileObj = document.createElement("<input type=file onchange=changeFile(form)>");
  28.                         delObj = document.createElement("<input type=button onclick=delInputFile('" + spanId + "','" + fileId + "')>");
  29.                     } 
  30.                     else 
  31.                     {
  32.                         fileObj = document.createElement("input");
  33.                         fileObj.type = "file";
  34.                         fileObj.setAttribute("onchange", "changeFile(form)", 0);
  35.                         delObj = document.createElement("input");
  36.                         delObj.type = "button";
  37.                         delObj.setAttribute("onclick", "delInputFile('" + spanId + "','" + fileId + "')", 0);
  38.                     }
  39.             
  40.                     fileObj.name = fileId;
  41.                     fileObj.size = "40";
  42.                     fileObj.className = "input";
  43.                     delObj.value = RES_BT_DELETE;
  44.                     divObj.appendChild(fileObj);
  45.                     divObj.appendChild(document.createTextNode(" "));
  46.                     divObj.appendChild(delObj);
  47.                     span.appendChild(divObj);
  48.                 }
  49.             }
  50.             
  51.             function delInputFile(spanId, fileId) 
  52.             {
  53.                 var span = document.getElementById(spanId);
  54.                 var divObj = document.getElementById(fileId);
  55.                 if (span != null && divObj != null) 
  56.                 {
  57.                     span.removeChild(divObj);
  58.                 }
  59.             }
  60.         //-->
  61.         </SCRIPT>
  62.         <META content="MSHTML 6.00.2800.1528" name=GENERATOR>
  63.     </HEAD>
  64.     
  65.     <BODY class=pagebackground>
  66.         <FORM id=form action=XXX method=post encType=multipart/form-data>
  67.             <TABLE class=dialog1 height=20 cellSpacing=1 cellPadding=8 width="90%" align=center>
  68.                 <TBODY>
  69.                 <TR>
  70.                     <TD noWrap>通过文件上传: </TD>
  71.                     <TD id=filespan noWrap>
  72.                         <INPUT class=input type=file size=40 name=file>
  73.                         <INPUT id=btnAdd onclick=addFile() type=button value=添加>
  74.                     </TD>
  75.                 </TR>
  76.                 </TBODY>
  77.             </TABLE>
  78.         </FORM>
  79.     </BODY>
  80. </HTML>

  2. 案例二:

  1. <html>
  2.     <head>
  3.         <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  4.         <title>新建网页 1</title>
  5.     </head>
  6.     <body>
  7.         <script language=JavaScript>
  8.             function fAddAttach()
  9.             {
  10.                var gAttchHTML='<div class="qrle text2">附件:</div><div class="le"><input type="file" name="attachfile[]"  class="bot3" ></div><div class="le"><input type="button" name="Submit" value=" 删除 " class="bot2" id="btnDeleteReadAttach"  /></div><span></span>';
  11.                var Attach=document.getElementById("dvReadAttach");
  12.                var spnList=Attach.getElementsByTagName("SPAN");
  13.                var spn=document.createElement("DIV");
  14.                spn.className="qrc4";
  15.                spn.innerHTML=gAttchHTML;
  16.                spn.childNodes[1].childNodes[0].name="attachfile[]" + spnList.length;
  17.                Attach.appendChild(spn);
  18.                fGetObjInputById(spn,"btnDeleteReadAttach").onclick=function(){fDeleteAttach(this);};
  19.                document.getElementById("aAddAttach").innerHTML="继续添加附件";
  20.                Attach.style.display="";
  21.                if(spnList.length>1)
  22.                {
  23.                  spn.childNodes[0].innerHTML="   ";
  24.                }
  25.             }
  26.             function fGetObjInputById(obj,id)
  27.             {
  28.                var inputList=obj.getElementsByTagName("INPUT");
  29.                for(var i=0;i<inputList.length;i++)
  30.                {
  31.                  if(inputList[i].id==id)
  32.                  {
  33.                     return inputList[i];
  34.                  }
  35.                }
  36.                return null;
  37.             }
  38.             
  39.             function fDeleteAttach(obj)
  40.             {
  41.                 try
  42.                 {
  43.                     obj.parentNode.parentNode.parentNode.removeChild(obj.parentNode.parentNode);
  44.                     var Attach=$("dvReadAttach");                       
  45.                     var spnList=Attach.getElementsByTagName("SPAN");
  46.                     if(spnList.length==0)
  47.                     {
  48.                          document.getElementById("aAddAttach").innerHTML="添加附件";
  49.                          Attach.style.display="none";
  50.                     }
  51.                     else
  52.                     {
  53.                         document.getElementById("aAddAttach").innerHTML="继续添加附件";
  54.                     }
  55.                 }
  56.                 catch(exp)
  57.                 {
  58.                     //fDebug("fDeleteAttach",exp.description);
  59.                 }
  60.             }
  61.         </script>
  62.         <BODY BGCOLOR=WHITE> 
  63.             <a href="javascript:fAddAttach();" id="aAddAttach">添加附件</a>
  64.             <div id="dvReadAttach" style="display:none">
  65.         </BODY>
  66.     </body>
  67. </html>

二、清空inputFile的内容

  1. 方法一:

  1. <FORM name=form1>   
  2.   <input type="file" name=f>   
  3.   <input type=button value=reset onclick="f.select();document.execCommand('delete')">   
  4. </FORM>   

  2. 方法二:

  1. <FORM name=form1>   
  2.   <input type="file" name=f>
  3.   <input type=button value=reset onclick="form1.f.outerHTML='<input type=/'file/' name=/'f/'>'"> 
  4. </FORM>
### 实现发送邮件页面中的文件上传功能 为了在发送邮件的功能页面中添加文件上传支持,可以参考以下几个方面来设计和开发: #### 1. 前端部分:动态添加文件上传组件 前端可以通过 JavaScript 动态生成文件上传控件,允许用户多次选择并管理多个文件。以下是基于 HTML 和 JS 的实现方式[^3]。 ```javascript // 初始化变量用于存储已选文件的信息 let fileInputs = []; function addFileInput() { const container = document.getElementById('upload-container'); // 创建新的文件输入框及其关联的删除按钮 const newDiv = document.createElement('div'); newDiv.innerHTML = ` <input type="file" name="files[]" /> <button onclick="removeFile(this)">删除</button> `; container.appendChild(newDiv); // 更新全局数组记录新加入的 input 控制器 fileInputs.push(newDiv.querySelector('input')); } function removeFile(button) { button.parentElement.remove(); updateUploadButtonVisibility(); } function updateUploadButtonVisibility() { const uploadContainer = document.getElementById('upload-container'); const hasFiles = Array.from(uploadContainer.children).length > 0; document.getElementById('send-email-button').style.display = hasFiles ? 'inline-block' : 'none'; } ``` 上述代码实现了以下逻辑: - 用户每次点击“添加文件”按钮时,都会新增一个文件选择框。 - 如果用户想要移除某个文件选项,则通过对应的“删除”按钮完成操作。 - 当所有的文件选择框都被清除后,“发送邮件”的按钮会被自动隐藏。 #### 2. 后端处理:接收并保存上传文件 后端需要配置好能够解析 `multipart/form-data` 类型数据的服务接口,并按照业务需求对接收到的文件执行相应的动作(比如临时存储、压缩或者直接作为附件附加到电子邮件里)。这里给出 Python Flask 框架下简单的例子[^2]: ```python from flask import request, jsonify import os UPLOAD_FOLDER = '/path/to/the/uploads' ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS @app.route('/api/upload', methods=['POST']) def upload_files(): files = request.files.getlist('files[]') saved_paths = [] for file in files: if file.filename == '': continue if not allowed_file(file.filename): return jsonify({"error": f"{file.filename} is not an allowed extension"}), 400 path = os.path.join(UPLOAD_FOLDER, secure_filename(file.filename)) file.save(path) saved_paths.append(path) # 这里的saved_paths可用于后续邮件服务调用 return jsonify({'uploaded': saved_paths}), 200 ``` 该脚本片段展示了如何安全地获取客户端提交过来的一个或多份文件,并验证其扩展名是否合法后再将其写入服务器本地磁盘目录之中。 #### 3. 邮件集成:将上传后的文件附带至邮件正文 最后一步就是利用像 smtplib 或者第三方库 SendGrid 来构建一封包含这些附件在内的电子信函[^4]。下面是一个基本示例: ```python import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders def send_email_with_attachments(to_address, subject, body, attachments): fromaddr = "your-email@example.com" msg = MIMEMultipart() msg['From'] = fromaddr msg['To'] = to_address msg['Subject'] = subject msg.attach(MIMEText(body, 'plain')) for attachment_path in attachments: part = MIMEBase('application', 'octet-stream') with open(attachment_path, "rb") as attachment: part.set_payload(attachment.read()) encoders.encode_base64(part) part.add_header( 'Content-Disposition', f'attachment; filename= {os.path.basename(attachment_path)}', ) msg.attach(part) server = smtplib.SMTP('smtp.example.com', 587) server.starttls() server.login(fromaddr, "password") text = msg.as_string() server.sendmail(fromaddr, to_address, text) server.quit() for uploaded_file in saved_paths: try: send_email_with_attachments("recipient@example.com", "Test Email", "Please find attached.", [uploaded_file]) finally: os.unlink(uploaded_file) # 删除临时文件以防泄露隐私信息 ``` 以上程序说明了怎样组合先前收集好的文件地址列表形成最终待寄送的内容体结构,同时确保每封发出之前先销毁原始副本防止敏感资料外泄风险。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值