惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - Franky
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
Google DeepMind News
Google DeepMind News
腾讯CDC
G
Google Developers Blog
Martin Fowler
Martin Fowler
Microsoft Security Blog
Microsoft Security Blog
Recent Announcements
Recent Announcements
爱范儿
爱范儿
Engineering at Meta
Engineering at Meta
Microsoft Azure Blog
Microsoft Azure Blog
A
About on SuperTechFans
aimingoo的专栏
aimingoo的专栏
有赞技术团队
有赞技术团队
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
M
MIT News - Artificial intelligence
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
美团技术团队
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志

博客园 - 落尘

.NET上传图片加文字和水印图片源码 - 落尘 - 博客园 ASP.NET下的多文件上传 文件的上传和下载 在ASP.NET程序中实现语音合成 .Net平台下开发中文语音应用程序 语音合成与识别技术在C#中的应用 如何防止ASP 木马在服务器上运行 用ASP实现在线压缩与解压缩 asp对象化之:基于adodb.stream的文件操作类 js鼠标及对象坐标控制属性 NET中各种数据库连接大全 几个ASP.NET技巧 设计ASP.NET应用程序的七大绝招 ASP.NET中如何调用存储过程 Asp.net cache 简述 如何用C#把Doc文档转换成rtf格式 单点登陆 硬盘双击无法打开是咋回事 Asp.net直接保存文件到客户端
ASP.NET 2.0 多文件上传小经验
落尘 · 2007-02-05 · via 博客园 - 落尘

想实现任意多个文件上传的功能,点击一次按钮可以添加一个文件上传框,以前在网络硬盘上看到过。javascript我知道怎么实现任意添加上传文件控件,问题是添加的是html控件,我不懂怎么让服务器端可以获取文件。

    于是上google搜索“asp.net 多文件上传”,还真找到一篇文件,标题为《在asp.net中实现多文件上传》,文章里面是vb.net实现的,功能和我要的一模一样,我主要是要看服务器端怎么获取客户端上传的文件,看了文中的代码,原来这么简单,system.web.httpcontext.current.request.files就包含客户端浏览器上传的文件了,我用c#写了一段简单的代码,原本以为应该可以了,结果出乎意料上传3个图片system.web.httpcontext.current.request.files返回的文件格式还是0个。

    不知道什么原因,看看代码,这么简单不可能些错啊,再看看google搜索结果里的另外几篇文章,发现我看的第一篇不是原做,作者的网站上原作的实例有两个版本,一个是vb.net一个是c#的,现在我不用自己写了,复制原文的代码到本地,运行,果然可以啊,那我写的代码怎么不行?反复比对我的代码和文章中代码的区别,试了几个地方,最后发现和其他地方都没有关系,原因出在<form id="form1" runat="server" enctype="multipart/form-data"> 的enctype属性上,vs 2005建的页面里没有这个属性,而文章实例里有,我后来加上enctype="multipart/form-data"后system.web.httpcontext.current.request.files就能z正常获取文件个数了。

    大概是vs 2003建的页面默认有这个属性吧,否则这么重要的属性作者应该会在文章中提到的。

参考:
《在asp.net中实现多文件上传》

我做的试验代码:

<%@ page language="c#" autoeventwireup="true" codebehind="default.aspx.cs" inherits="demo._default" %>

<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<script language="javascript">
function addfile()
{
 var str = <input type="file" size="50" name="file">
 document.getelementbyid(myfile).insertadjacenthtml("beforeend",str)
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>untitled page</title>
</head>
<body>
    <form id="form1" runat="server" enctype="multipart/form-data">
           <input type="button" value="增加(add)" onclick="addfile()">
          <input onclick="this.form.reset()" type="button" value="重置(reset)">
          <asp:button runat="server" text="上传" id="upload" onclick="upload_click1" ></asp:button>
    <div id="myfile">
         <input type="file" name="file" />
    </div>
    </form>
</body>
</html>

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 demo
{
    public partial class _default : system.web.ui.page
    {
        protected void page_load(object sender, eventargs e)
        {
        }
        protected void upload_click1(object sender, eventargs e)
        {

            httpfilecollection _files = system.web.httpcontext.current.request.files;

            for (int i = 0; i < _files.count; i++)
            {
                _files[i].saveas(server.mappath("~/files/" + _files[i].filename));
            }
        }
    }
}