后台不识别生成write出来的fileupload控件【求解】

星先 2013-05-08 07:55:14
功能很简单,就是批量生成些file控件,然后一次性上传,虽然发出来的代码看着很多,但其实内容一看就明白了。

我的file控件已经生成出来了,但是点击保存时,HttpContext.Current.Request.Files识别不出生成出来的file控件。

大伙帮看看怎么回事吧。。。
代码现成的,粘贴复制直接就能用。
挺急的,谢大家了。。。


页面后台代码如下

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace JXSOFT.Web
{
public partial class Default : System.Web.UI.Page
{
protected internal System.Text.StringBuilder templateBuilder = new System.Text.StringBuilder();
protected void Page_Load(object sender, EventArgs e)
{
writeupload();
}
private void writeupload()
{
templateBuilder.Append("<table id=\"tb_attachment\" border=\"0\">\r\n");
templateBuilder.Append("<tbody id=\"attachbodyhidden\" style=\"display:none\"><tr>\r\n");
templateBuilder.Append("<td width=\"300\">\r\n");
templateBuilder.Append("<input type=\"file\" name=\"postfile\"/>\r\n");
templateBuilder.Append("<span id='localfile[]'></span>\r\n");
templateBuilder.Append("<td>\r\n");
templateBuilder.Append("</tr></tbody>\r\n");
templateBuilder.Append("<tbody id='attachbody'></tbody>\r\n");
templateBuilder.Append("</table>\r\n");
templateBuilder.Append("<script language='javascript' type='text/javascript'>");
templateBuilder.Append(" var ATTACHMENT_TYPE_DENY = '不合适的附件类型'\r\n");
templateBuilder.Append(" var ATTACHMENT_DELETE = '删除'\r\n");
templateBuilder.Append("</script>");
templateBuilder.Append(string.Format(@"<script language='javascript' type='text/javascript' src='{0}'></script>", "../js/bugAttachment.js"));
if (true)
{
td_attachment.InnerHtml = templateBuilder.ToString();
}
Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "bugnetzoom", String.Format("<script language='javascript' src='../js/{0}'></script>", "imgzoom.js"));
}

private void SaveProjectFiles(string ProjectID, HttpPostedFile file)
{

if (file == null || file.FileName.Trim().Length == 0 || file.ContentLength == 0)
{
return;
}
string filename = file.FileName;
int pos = filename.LastIndexOfAny(new char[] { '/', '\\' });
if (pos >= 0) filename = filename.Substring(pos + 1);
int maxFileSize;

maxFileSize = Session["FileSize"] == null ? 2048 : Convert.ToInt32(Session["FileSize"]);
if (file.ContentLength / 1024 > maxFileSize)
{
return;
}

//上传路径
string uploadPath = String.Format("{0}{1}", Server.MapPath("~/upload/projectfile"), DateTime.Now.ToString("yyyyMMdd"));

if (!System.IO.Directory.Exists(uploadPath))
{
System.IO.Directory.CreateDirectory(uploadPath);
}


file.SaveAs(String.Format("{0}/{1}", uploadPath, filename));

}
protected void btnSave_Click(object sender, EventArgs e)
{
HttpFileCollection files = HttpContext.Current.Request.Files;
try
{
for (int i = 0; i < files.Count; i++)
{
//检查文件扩展名字
HttpPostedFile postedFile = files[i];
//files[0]为空
SaveProjectFiles("1", postedFile);
}

}
catch (System.Exception Ex)
{
throw new ApplicationException(Ex.ToString());
}

}
}
}

html代码

<form id="form1" runat="server">
<div>
<table style="width: 100%;" cellpadding="2" cellspacing="1" class="border" id="tb_attachment" runat="server">
<tr>
<td class="tdbg">
<table cellspacing="0" cellpadding="0" width="100%" border="0">
<tr>
<td height="25" width="30%" align="right">
添加文件 :
</td>
<td height="25" width="*" align="left" id="td_attachment" runat="server" clientidmode="Static">
</td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="tdbg" align="center" valign="bottom">
<asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click" class="inputbutton"
onmouseover="this.className='inputbutton_hover'" onmouseout="this.className='inputbutton'">
</asp:Button>
</td>
</tr>
</table>
</div>
</form>

bugAttachment.js文件

function delAttach(obj)
{
var curattlength = document.getElementById('attachbody').childNodes.length;
document.getElementById('attachbody').removeChild(obj.parentNode.parentNode.parentNode);
document.getElementById('attachbody').innerHTML == '' && addAttach();
if (curattlength == 10 )
{
addAttach();
}
}
function addAttach()
{
if (document.getElementById('attachbody').childNodes.length > 10 - 1)
{
return;
}
newnode = document.getElementById('attachbodyhidden').firstChild.cloneNode(true);
var tags;
tags = newnode.getElementsByTagName('input')
for(i in tags)
{
if(tags[i].name == 'postfile')
{
tags[i].onchange = function()
{
insertAttach(this);
};
tags[i].unselectable = 'on';
}
}
document.getElementById('attachbody').appendChild(newnode);
}

addAttach();

function insertAttach(obj)
{
var localimgpreview = '';
var path = obj.value;
var extensions = 'jpg,gif,png,zip,rar,jpeg,doc,pdf,docx,xls,xlsx,ppt,pptx';
var ext = path.lastIndexOf('.') == -1 ? '' : path.substr(path.lastIndexOf('.') + 1, path.length).toLowerCase();
var re = new RegExp("(^|\\s|,)" + ext + "(document.getElementById|\\s|,)", "ig");
if (path == '') {
return;
}
if (extensions != '' && (re.exec(extensions) == null || ext == '')) {
obj.value = '';
alert(ATTACHMENT_TYPE_DENY);
return;
}


obj.style.display="none";
var err = false;
obj.parentNode.getElementsByTagName('span')[0].innerHTML ='<input type="text" value="'+ obj.value+'" readonly="readonly" /><a href="#delAttach" onclick="delAttach(this)">'+ATTACHMENT_DELETE+'</a> ' ;
addAttach();
}

imgzoom.js文件

var isIe=(document.all)?true:false;

function initZoom(){

var imgs=document.getElementsByTagName('img')
for (var i=0; i<imgs.length; i++)
if(imgs[i].className=='img_tozoom')
{
imgs[i].onmouseover=showZoom;
imgs[i].onmouseout=hideZoom;
}
}

function getposOffset(what, offsettype){
var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
var parentEl=what.offsetParent;
while (parentEl!=null){
totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft :
totaloffset+parentEl.offsetTop;
parentEl=parentEl.offsetParent;
}
return totaloffset;
}

function showZoom(){

var zoomImg=document.createElement("img");
zoomImg.className="zoomImg";
zoomImg.onmouseout=function(){
with(this){
style.display='none'
}
}
zoomImg.onmouseover=function(){
with(this){
style.display='block'
}
}
zoomImg.src=this.src;
var styleStr="position:absolute;background:#fff;width:486px;height:486px;";
//styleStr+=(isIe)?"filter:alpha(opacity=50);":"opacity:0.5;";

zoomImg.style.cssText=styleStr;
var imgx=getposOffset(this, "left")
var imgy=getposOffset(this, "top");
if(this.offsetHeight>486)
zoomImg.style.top=imgy-486//+this.offsetHeight
else zoomImg.style.top=imgy
zoomImg.style.left=imgx+this.offsetWidth
document.body.appendChild(zoomImg);
}

function hideZoom(){

var imgs=document.getElementsByTagName('img')
for (var i=0; i<imgs.length; i++)
if(imgs[i].className=='zoomImg')
{
imgs[i].style.visibility="hidden"
}
//document.getElementById('zoomImg').style.dispaly='none'
}


...全文
94 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
星先 2013-05-09
  • 打赏
  • 举报
回复
引用 4 楼 tcmakebest 的回复:
楼主做贯了 asp 吧,asp.net 得拖控件。
asp.net真的可以不拖控件的。。
星先 2013-05-09
  • 打赏
  • 举报
回复
引用 1 楼 net_lover 的回复:
你需要写成 <form id="form1" runat="server" enctype="multipart/form-data">
加了这个果然好用了。 JS倒没什么不对的,那JS是用来不断生成file的。 就是不知道为什么,页面上只生成了两个file,后台却读出来了四个。。另两个是空值。。。
tcmakebest 2013-05-08
  • 打赏
  • 举报
回复
楼主做贯了 asp 吧,asp.net 得拖控件。
吕津 2013-05-08
  • 打赏
  • 举报
回复
孟子好厉害。
孟子E章 2013-05-08
  • 打赏
  • 举报
回复
另外,确保你的js代码正确。单纯使用下面的代码测试时正确的
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default16.aspx.cs" Inherits="Default16" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title></title>
</head>
<body>
  <form id="form1" runat="server" enctype="multipart/form-data">
  <div>
    <table style="width: 100%;" cellpadding="2" cellspacing="1" class="border" id="tb_attachment"
      runat="server">
      <tr>
        <td class="tdbg">
          <table cellspacing="0" cellpadding="0" width="100%" border="0">
            <tr>
              <td height="25" width="30%" align="right">
                添加文件 :
              </td>
              <td height="25" width="*" align="left" id="td_attachment" runat="server" clientidmode="Static">
              </td>
            </tr>
          </table>
        </td>
      </tr>
      <tr>
        <td class="tdbg" align="center" valign="bottom">
          <asp:Button ID="btnSave" runat="server" Text="保存" OnClick="btnSave_Click"></asp:Button>
        </td>
      </tr>
    </table>
  </div>
  </form>
</body>
</html>
  protected internal System.Text.StringBuilder templateBuilder = new System.Text.StringBuilder();
  protected void Page_Load(object sender, EventArgs e)
  {
    if (!Page.IsPostBack)
    {
      writeupload();
    }
  }
  private void writeupload()
  {
    templateBuilder.Append("<table id=\"tb_attachment\" border=\"0\">\r\n");
    templateBuilder.Append("<tbody id=\"attachbodyhidden\" ><tr>\r\n");
    templateBuilder.Append("<td width=\"300\">\r\n");
    templateBuilder.Append("<input type=\"file\" name=\"postfile\"/>\r\n");
    templateBuilder.Append("<span id='localfile[]'></span>\r\n");
    templateBuilder.Append("<td>\r\n");
    templateBuilder.Append("</tr></tbody>\r\n");
    templateBuilder.Append("<tbody id='attachbody'></tbody>\r\n");
    templateBuilder.Append("</table>\r\n");
    td_attachment.InnerHtml = templateBuilder.ToString();

  }

  private void SaveProjectFiles(string ProjectID, HttpPostedFile file)
  {

    if (file == null || file.FileName.Trim().Length == 0 || file.ContentLength == 0)
    {
      return;
    }
    string filename = file.FileName;
    int pos = filename.LastIndexOfAny(new char[] { '/', '\\' });
    if (pos >= 0) filename = filename.Substring(pos + 1);
    int maxFileSize;

    maxFileSize = Session["FileSize"] == null ? 2048 : Convert.ToInt32(Session["FileSize"]);
    if (file.ContentLength / 1024 > maxFileSize)
    {
      return;
    }

    //上传路径
    string uploadPath = String.Format("{0}{1}", Server.MapPath("~/upload/"), DateTime.Now.ToString("yyyyMMdd"));

    if (!System.IO.Directory.Exists(uploadPath))
    {
      System.IO.Directory.CreateDirectory(uploadPath);
    }


    file.SaveAs(String.Format("{0}/{1}", uploadPath, filename));

  }
  protected void btnSave_Click(object sender, EventArgs e)
  {

    HttpFileCollection files = HttpContext.Current.Request.Files;
    Response.Write(files.Count);
    try
    {
      for (int i = 0; i < files.Count; i++)
      {
        //检查文件扩展名字
        HttpPostedFile postedFile = files[i];
        //files[0]为空
        Response.Write(postedFile.FileName);
        SaveProjectFiles("1", postedFile);
      }

    }
    catch (System.Exception Ex)
    {
      throw new ApplicationException(Ex.ToString());
    }

  }
孟子E章 2013-05-08
  • 打赏
  • 举报
回复
你需要写成 <form id="form1" runat="server" enctype="multipart/form-data">

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧