仿163网盘无刷新多文件上传系统

这个仿163网盘无刷新文件上传系统,并没有用使用.net的控件,完全的手工制作。前台基本上是静态的,跟后台没有关系,所以后台用什么语言做都可以(后面有各个版本的实例下载)。
本来觉得这个系统会很复杂,但把每个部分都分析清楚后,其实需要的技术并不高。不过当我把各个功能函数都整理好准备进行封装时,却发现要把程序封装不是那么容易,因为程序跟html的耦合度太高。然后我逐步把程序中操作html相关的部分分离出来,首先把简单的分离,接着是文件列表,然后是file控件,最后是一些提示性程序。经过几次尝试才把整个结构封装好,现在程序结构应该算比较清晰,有什么不明白的地方欢迎留言。


效果预览

上传文件
添加文件:
文件路径
温馨提示:最多可同时上传 个文件,只允许上传 文件。
   
这里的预览只是前台的效果,要整个系统测试请下载完整实例。

程序说明

【无刷新上传】
要实现文件上传,form必须设置几个属性:
1.action:设为要处理数据的页面地址;
2.method:设为"post";
3.enctype/encoding:必须设为"multipart/form-data",这里要注意的是在ie中用js修改form的enctype属性是没有效果的,只能修改encoding;

后面两个属性程序初始化时都有设置:

this.Form.method = "post";
this.Form.encoding = "multipart/form-data";


要注意这里的无刷新不是ajax哦,而是利用“古老”的iframe。
由于ajax提交数据必须先获取数据,而js(一般情况下)是不能操作客户端文件,要获取文件数据就更不用说了,所以只能用iframe来做。
先说说iframe实现无刷新上传的原理:利用form的target属性,把数据提交到页面中一个(通常为隐藏的)iframe上直观点说就是把“刷新”留给iframe。
其实原理跟一般用iframe实现无刷新提交表单是一样的,只是这里换成是文件。
这里关键就是把form的target设为iframe的name:

this.Form.target = this._FrameName;


【iframe】
如果没有自定义iframe,程序在初始化时会自动创建无刷新所需的iframe的。
首先必须选择一个iframe名,这在无刷新时是必须的,为了每个实例能创建各自的iframe,这里用了一个随机数:

this._FrameName = "uploadFrame_" + Math.floor(Math.random() * 1000);


也可以用一个递增的计算器来代替随机数。

接着创建iframe,本以为用document.createElement("iframe")创建再设置它的name属性就行了。
却发现这样设置的name在ie居然不认(有说name是只读属性),还好在网上找到一个方法:“IE 创建元素,还有一个特点,就是可以连同属性一同创建”。
例如我想给动态创建的iframe设置name,可以这样:

document.createElement("<iframe name=\"" + this._FrameName + "\">")

不过这个方式在ff会报错:
uncaught exception: String contains an invalid character (NS_ERROR_DOM_INVALID_CHARACTER_ERR)
估计是用createElement时不能带name,标准应该也是这样,所以兼容的方式这样写:

Code

关于这方面更详细的内容请看这里

创建完还需要插入到body中,一般的做法是使用document.body.appendChild,但在ie中会有“已终止操作”错误,可以用下面这段代码测试:

Code

网上找到一个解析:“原来FF下的实现机制是当页面还没有完全读取完时body元素就已经存在了,而IE只有页面完全读取结束body元素才会存在,所以在页面中插入上面这条语句在IE下就会出现错误”。
我在web开发未解之谜中也提到了这个现象,我这里使用了insertBefore代替:

document.body.insertBefore(oFrame, document.body.childNodes[0]);

在服务器端文件传送完(或失败)之后,怎么通知客户端呢?
这里说说我的方法,首先我在客户端定义一个函数:

function Finish(msg){ alert(msg); location.href = location.href; }

很简单,就是显示提示并重新加载页面(如果使用reload会导致ff中iframe重复加载数据)。
那服务器端如何通知客户端的问题,就是iframe如何跟主页面交互。
答案是通过window.parent或window.top,在iframe中parent和top属性“分别返回立即父窗口和最上层的祖先窗口”。
例如我在服务器端处理完数据之后会输出:

context.Response.Write("<script>window.parent.Finish('" + _msg + "');</script>");

就会执行主页面的Finish函数了。


【多文件上传】
对于多文件上传,这里的目的是如何做到163网盘那样,只用一个file控件就实现多文件上传。
这里参考了163网盘的思路,下面说说如何实现:
首先必须有一个文件空间(我自己定的名字),例如程序中的"idFile"对象,这个空间不需要内容甚至一个div就可以,主要是用来存放file控件,程序中Folder属性就是这个文件空间对象。
ps:这里的要求是把file控件都控制在文件空间里,即使不是单file控件的情况。
再说说Files属性,这个属性放的是file控件集合,方便获取file控件,在下面“文件列表”就会用到。

处理这些file控件的程序主要在Ini函数中:
首先是处理文件空间中的file控件:

Code

可以看到这里主要是把file控件放入到Files中,并执行附加函数onIniFile,我是这样定义这个函数的:

onIniFile: function(file){ file.value ? file.style.display = "none" : this.Folder.removeChild(file); }

这里为了实现单file控件,把原来有值的file都隐藏了,还有那个“单file控件”呢?
别急,接着就在文件空间插入一个新的file控件:

Code

可以看到file控件的name是FileName属性的值,默认是空的,如果服务器端需要这个name的话就可以设置。
这里可以看到每个file控件都有onchange来执行检测函数Check,这样每次选择文件后都会用Check检测一次,这里说说这个Check函数:

Code

里面有一个检测变量bCheck,然后进行空值、文件数限制、后缀名、相同文件的检测,当其中一个步骤不通过bCheck就会设为false,一个常用的检测结构。
这里说说检测后缀名,由于js不能像后台那样获取文件的文件类型,所以只能根据后缀名来判断,例如用正则判断:

/\.(jpg|gif)$/i.test(file.value)

这样判断显然是不够的,所以如果要做文件类型判断的话一定要在后台用ContentType再判断一次。
最后如果没有通过检测就会执行onFail函数:

!bCheck && this.onFail(file);

我在onFail函数中设定了移除没有通过检测的file控件:

onFail: function(file){ this.Folder.removeChild(file); }


这样就基本实现(正确的说是模拟)了单file控件上传多个文件的效果了。


【文件列表】
在上面的Ini函数中,最后执行了一个附加函数onIni,这个函数是用户自己定义的,我就在这个函数中添加文件列表。

在之前先说说添加文件列表的函数AddList,这个函数是用来把file控件的值列在一个table里面。
函数的参数是一个二维数组,其中第一维是行(tr),第二维是列(td)。
首先获取列表对象FileList,再定义一个文档碎片oFragment来操作dom:

var FileList = $("idFileList"), oFragment = document.createDocumentFragment();

然后用两个Each把二维数组插入到文档碎片中:

Code

其中用了一个判断if(typeof o == "string"),如果是文本就直接用innerHTML插入td,如果不是文本(这里不是文本就是一个对象)就用appendChild插入到td。
当数据都插入到文档碎片,就准备把文档碎片插入到FileList中,不过还有一个步骤就是清空FileList中原有的数据。
本来把innerHTML设为空来清空FileList会更有效率,但ie的table中只有td支持innerHTML,所以只好用removeChild来清空:

while(FileList.hasChildNodes()){ FileList.removeChild(FileList.firstChild); }

之后就可以把文档碎片插入了:

FileList.appendChild(oFragment);


继续看onIni函数,现在只需要把要显示的数据组成一个二维数组,再用AddList就能显示文件列表了,这时存放file控件集合的Files属性就大有用处了。
首先定义一个放显示数据的数组:

var arrRows = [];

然后根据Files对这个数组赋值:

Code

当Files没有控件时只是输出“没有添加文件”,有控件时就会把每个file控件的要显示数据放到一个数组中,可以看到这个数组其实就是td内容的集合,接着把这个数组加入到arrRows中形成二维数组,最后把得到的arrRows给AddRow函数显示数据就行了。
为了能取消指定的file控件,这里插入了一个a来触发删除函数Delete,这里也有一个技巧,这里把href设为"javascript:void(0);",并在onclick中返回false,这样能最大程度的实现仅仅执行js而不去跳转。

在表单提交时也要重新显示文件列表,表单提交后就不允许删除文件了,只显示文件路径就行了:

Code

说到表单提交要注意一个问题,就是表单是不能嵌套的,最好是把表单放到服务器表单之外,没有办法才使用服务器表单作为提交表单(由于程序会修改提交表单的属性,所以尽量不要这样使用)。

这样文件列表就完成了,有兴趣的话也可以自己封装一下这个功能。


【file样式】
到此,程序的功能都已经实现了,但在163网盘中还有一个特别的地方,就是file控件的样式。
如果有用过163网盘上传文件,就知道那个file控件就像一个按钮,但功能确实是一个file控件。
但当自己尝试修改file控件的样式时,发现单单设置file控件的样式并不能实现想要的效果。
于是我想了另一个办法,用一个button来模拟,结果发现也不行,用js根本操作不了file控件,应该是考虑到安全问题吧。
最后是参考了163网盘和muxrwc模拟126附件添加的效果,总结了这个方法:
1.指定用一个容器(例如程序中的idFile)。
容器最好指定高和宽,并且overflow为hidden,不是块级元素的最好设display为block(为了高和宽的正确呈现);
2.在容器里放一个file控件,并设置样式,使能触发弹出选择文件框的部分覆盖整个容器,并设置成全透明。
容器指定准确的高和宽就是为了能通过file控件中不多的能设置的样式来覆盖整个容器;
3.现在已经把容器模拟成file控件了,可以直接设置容器的样式来模拟设置file控件的样式了。

在程序中主要用file控件的margin-left和font-size来实现覆盖整个容器:

Code

至于容器,我使用了有伪类hover的a元素(虽然CSS2中hover可以应用于任何对象,但ie6不支持)。
这里用了一个常用的小技巧,就是用一张图片作为背景通过在hover时修改background-position来实现两张图片的效果:

Code

在点击这个a时后会出现一个虚线框,在这里显然不太美观,可以把outline设为none来去掉,可是ie又不支持,在网上找到一个方法ie可以把hideFocus设为true来隐藏聚焦(即不显示这个虚线框,hideFocus可以在js或html中设置,也可以通过expression放到css中:

Code


这样完全模拟了163网盘的效果了。


【后台】

前台基本完成了,就到后台啦。后台的功能很简单,就是处理传递过来的文件数据。
这里像js + .Net 图片切割系统那样使用ashx文件处理IHttpHandler发送过来的数据。
程序很简单,就直接贴代码了:

Code

这里只检测了有无文件和文件数限制,其他检测如文件大小等可以自己扩展,应该不难。
处理完数据之后就通知客户端:

context.Response.Write("<script>window.parent.Finish('" + _msg + "');</script>");

这个在上面iframe的内容中已经说明了。


使用说明

基本使用很简单,实例化一个file对象,其中参数分别是form对象,文件空间对象:

new FileUpload("uploadForm""idFile")

这样就实现了一个简单的无刷新上传文件表单。

还可以使用这几个属性:
Form//表单
Folder//文件控件存放空间
Files//文件集合

更多的功能可以选择设置这些属性:
属性名:默认值//说明
FileName:"",//文件上传控件的name,配合后台使用
FrameName:"",//iframe的name,要自定义iframe的话这里设置name
onIniFile:function(){},//整理文件时执行(其中参数是file对象)
onEmpty:function(){},//文件空值时执行
Limit:0,//文件数限制,0为不限制
onLimite:function(){},//超过文件数限制时执行
Distinct:true,//是否不允许相同文件
onSame:function(){},//有相同文件时执行
ExtIn:[],//允许后缀名
onNotExtIn:function(){},//不是允许后缀名时执行
ExtOut:[],//禁止后缀名,当设置了ExtIn则ExtOut无效
onExtOut:function(){},//是禁止后缀名时执行
onFail:function(){},//文件不通过检测时执行(其中参数是file对象)
onIni:function(){}//重置时执行

使用方法可以参考实例。

程序中提供了下面几个方法:
Ini 整理空间
Check 检测file对象
Delete 删除指定file
Clear 删除全部file


完整程序

样式设置

Code

html代码

Code


程序代码

Code

测试代码

Code



【asp版本补充】

由于很多人问我asp版本的后台该如何写,所以决定写一个给大家。
这里我用了化境HTTP上传程序2.1版(应该是最新版了)的无组件上传类,但用的时候发现几个问题(不知是我不会用还是asp本身的问题):
1,当file控件的name是空时,后台会找不到文件;
2,文件名比较短时(例如我用"f"),后台也找不到文件;
3,当有多个file控件,如果使用相同的name,后台只会保存一个文件;
4,我在上传文件后输出的中文是乱码(有时又正常)。

针对前3条,我加了一个RanName属性,设为true的话会自动生成随机的file控件名,对于第4条,我发现如果字是直接写在文档上就不会乱码,所以我这里把输出的文字都直接写在文档上没有用变量。如果有兄弟知道怎么解决这些问题记得告诉我哦。


下载完整测试代码(.net)

下载完整测试代码(asp)

感谢由csdn网友mengshan1986提供的php和jsp版,klniuer的php修正版:
下载完整测试代码(php)
下载完整测试代码(jsp)

ps:请注意程序中的文件保存路径,很多人的错误都是没有设置好文件保存路径。

转载请注明出处:http://www.cnblogs.com/cloudgamer/
posted @ 2008-10-20 08:20 cloudgamer 阅读(21644) 评论(251)  编辑 收藏 网摘 所属分类: AspAsp.netJavascriptweb

评论共3页: 上一页 1 2 3 
  回复  引用  查看    
#201楼[楼主]2008-12-29 14:11 | cloudgamer      
@hnsongbiao@gmail.com
没有很好的方法
网上好像有用滤镜的方法,你搜索一下吧

  回复  引用    
#202楼2008-12-30 09:47 | kw1111111111111111[未注册用户]
上传的时候,如果成功上传会alert一个警告框,如果iTotal = 0;时,不会弹出“没有数据” 这是为什么,我找了好久,都不知道什么原因????????
  回复  引用  查看    
#203楼[楼主]2008-12-30 10:20 | cloudgamer      
@kw1111111111111111
你说的好像是后台输出的
你从后台代码找吧

  回复  引用    
#204楼2008-12-30 10:27 | kw1111111111111111[未注册用户]
public void ProcessRequest(HttpContext context)
{


int iTotal = 0;


try
{
iTotal = context.Request.Files.Count;
}
catch (Exception ex)
{
iTotal = 0;
}

if (iTotal == 0)
{
_msg = "沒有數據或超過文檔大小限制";
}
else
{
int iCount = 0;

for (int i = 0; i < iTotal; i++)
{


HttpPostedFile file = context.Request.Files[i];

if (file.ContentLength > 0 || !string.IsNullOrEmpty(file.FileName))
{
//保存文檔
file.SaveAs(HttpContext.Current.Session["CurrentDir"].ToString() + Path.GetFileName(file.FileName));

//這里可以根據實際設置其它限制
if (++iCount > UploadFileLimit)
{
_msg = "超過上傳限制:" + UploadFileLimit;
break;
}
_msg = "上傳成功";
}
}
}



context.Response.Write("<script type='text/javascript'>window.parent.Finish('" + _msg + "');</script>");
context.Response.End();
}

我把代碼改成這個了,添加了一個
if (iTotal == 0)
{
_msg = "沒有數據或超過文檔大小限制";
}
不會彈出警告框???

  回复  引用  查看    
#205楼[楼主]2008-12-30 10:41 | cloudgamer      
你不要
try
{
iTotal = context.Request.Files.Count;
}
catch (Exception ex)
{
iTotal = 0;
}
看会不会弹出
再看是哪一个部分有问题吧

  回复  引用    
#206楼2008-12-30 11:05 | kw1111111111111111[未注册用户]
if (iTotal == 0)
{
_msg = "沒有數據";
}

原本的這個也彈不出來,如果成功會彈出,其它都彈不出

  回复  引用  查看    
#207楼[楼主]2008-12-30 11:09 | cloudgamer      
@kw1111111111111111
这样说我也不清楚你的是什么情况
或者你发一份源码email我看看吧

  回复  引用    
#208楼2008-12-30 11:28 | kw1111111111111111[未注册用户]
我已經mail給你了,你查收一下,謝謝啦
  回复  引用    
#209楼2008-12-30 16:56 | hnsongbiao@163.com[未注册用户]
cloudgamer,关于上传前判断图片尺寸,在IE7下的解决办法,我找到了一个,不知道在您的这个程序里能否使用:

上传图片之前判断大小的解决办法(利用IE漏洞)
  <script>
  var img=null;
  function s()
  {
  if(img)img.removeNode(true);
  img=document.createElement("img");
  img.style.position="absolute";
  img.style.visibility="hidden";
  img.attachEvent("onreadystatechange",orsc);
  img.attachEvent("onerror",oe);
  document.body.insertAdjacentElement("beforeend",img);
  img.src=inp.value;
  }
  function oe()
  {
  alert("cant load img");
  }
  function orsc()
  {
  if(img.readyState!="complete")return false;
  alert("图片大小:"+img.offsetWidth+"X"+img.offsetHeight);
  alert("图片尺寸:"+img.fileSize);
  btn.disabled=false;
  }
  </script>
  <input id=inp type="file">
  <br/>
  <button onclick="s()">Test</button>
<button id=btn disabled>UpLoad</button>

  回复  引用  查看    
#210楼[楼主]2008-12-31 08:42 | cloudgamer      
@hnsongbiao@163.com
我测试了
这个在ie6可以
ie7还是不行啊

  回复  引用    
#211楼2008-12-31 13:23 | hnsongbiao@163.com[未注册用户]
cloudgamer,您再看看这个可以吗?能否再增加对图片尺寸的判断?

<html>
<head>
<script type="text/javascript">
function getFileSize() {
var path = file.value;
var fso = new ActiveXObject("Scripting.FileSystemObject");
var f = fso.GetFile(path);
alert(f.size);

}
</script>
</head>

<body>
<input type="file" name="file" id="file" value=""></input>
<input type="button" name="GetSize" onclick="getFileSize()" value="获得选择文件大小"></input>
</body>
</html>

  回复  引用  查看    
#212楼[楼主]2008-12-31 13:55 | cloudgamer      
@hnsongbiao@163.com
这个是用fso
但安全问题一般ie是不会开这个权限的(可以编辑本地文件,你说多危险)
所以这个办法基本没什么用

  回复  引用  查看    
#213楼2009-01-02 00:07 | 醉春风      
用.net版的 把htm页面直接放到 <iframe></iframe>中总是提示:“已有相同文件” 倒了。。
如果直接浏览.htm页面也会有这个提示。不知道大家有问题吗??

  回复  引用  查看    
#214楼2009-01-07 14:29 | Kevan      
太好了
  回复  引用    
#215楼2009-01-07 15:52 | huangzm[未注册用户]
请教:
我要实现如下样式,请问如何修改?
1.只显示用户名,而不是整个文件路径;
2. 所有添加的文件只在一行显示.
请博主给以解决,不胜感激.

  回复  引用  查看    
#216楼[楼主]2009-01-07 16:21 | cloudgamer      
@醉春风
貌似不会阿

@Kevan
谢谢支持

@huangzm
1 显示的时候截取一下就行了
2 这个在显示的时候自己设置一下吧
具体请自己研究吧,这些跟程序关系不大

  回复  引用    
#217楼2009-01-07 19:54 | 阿斯蒂芬[未注册用户]
.net那一版的怎么有脚步错误?
  回复  引用  查看    
#218楼[楼主]2009-01-07 21:41 | cloudgamer      
@阿斯蒂芬
什么错呢

  回复  引用  查看    
#219楼2009-01-08 12:24 | ξσ Dicky σξ      

  回复  引用    
#220楼2009-01-09 19:24 | wei1[未注册用户]
//设置默认属性

这里的设置,好像没有作用。

  回复  引用  查看    
#221楼[楼主]2009-01-09 19:28 | cloudgamer      
@ξσ Dicky σξ
谢谢支持

@wei1
不知你说的作用是什么

  回复  引用    
#222楼2009-01-10 01:06 | wei1[未注册用户]
@cloudgamer

下面这些参数变动不起效果。比如说要改上传数量,文件类型等。
实在搞不懂,请赐教。


//设置默认属性
SetOptions: function(options) {
this.options = {//默认值
FileName: "",//文件上传控件的name,配合后台使用
RanName: false,//文件上传的name是否随机名(这个是用于asp的无组件上传)
FrameName: "",//iframe的name,要自定义iframe的话这里设置name
onIniFile: function(){},//整理文件时执行(其中参数是file对象)
onEmpty: function(){},//文件空值时执行
Limit: 2,//文件数限制,0为不限制
onLimite: function(){},//超过文件数限制时执行
Distinct: true,//是否不允许相同文件
onSame: function(){},//有相同文件时执行
ExtIn: ["jpg", "gif", "png"],//允许后缀名
onNotExtIn: function(){},//不是允许后缀名时执行
ExtOut: [],//禁止后缀名,当设置了ExtIn则ExtOut无效
onExtOut: function(){},//是禁止后缀名时执行
onFail: function(){},//文件不通过检测时执行(其中参数是file对象)
onIni: function(){}//重置时执行
};
Extend(this.options, options || {});
},

  回复  引用  查看    
#223楼[楼主]2009-01-10 08:22 | cloudgamer      
@wei1
这里是默认属性
要修改的话应该在实例化的时候修改
你没看到new的时候
var fu = new FileUpload("uploadForm", "idFile", { Limit: 3, ExtIn: ["jpg", "gif"],
是这里设置了吗

  回复  引用    
#224楼2009-01-16 00:19 | joe1[未注册用户]
太好了!这让我获益匪浅!
  回复  引用    
#225楼2009-01-17 15:34 | 小刚啊[未注册用户]
现在FF3 和 IE8都因考虑用户隐私问题,input type = file 的value值,取不到完整的路径,路径过滤到只剩下一个文件名字。这个要怎么处理?
  回复  引用  查看    
#226楼[楼主]2009-01-17 16:04 | cloudgamer      
@joe1
谢谢支持

@小刚啊
ie8我咩用过不清楚
不过ff3还是有方法的你可以baidu一下
有时间我也会补充上去

  回复  引用    
#227楼2009-02-03 09:41 | woshi?[未注册用户]
楼主你好,我用那个php的代码试了一下,上传的时候总是提示:“正在添加文件到您的网盘中,请稍候……有可能因为网络问题,出现程序长时间无响应,请点击 ,取消...”,想问你一下您可能是那些地方没有设置好啊?先谢谢了。
  回复  引用  查看    
#228楼[楼主]2009-02-04 08:19 | cloudgamer      
@woshi?
可能是上传失败了
可以找其他人试试

  回复  引用    
#229楼2009-02-08 16:24 | xuwei[未注册用户]
很不错!
我想请教一下,我用的是.net版本的.我如果传个大点的rar文件就是报错:
int iTotal = context.Request.Files.Count;超过了最大请求长度
请问怎么解决,是怎么回事?谢谢了

  回复  引用  查看    
#230楼[楼主]2009-02-09 08:49 | cloudgamer      
@xuwei
一般服务器都会限制传输文件大小
超过就会出错,你调大一点试试

  回复  引用  查看    
#231楼2009-02-10 19:44 | friedy      
我将你的代码适当修改后嵌入了我们系统中,但在添加文件按钮按下并选择一个正确格式的文件后,其它的都正确,但file样式没回到可以选择文件的图片,file容器中看不到任何图片,点击页面中任意空白处样式即还原,只有一个隐藏的虚线框,虽然功能没有问题,但界面不符合委托方要求,望解救,谢谢。
  回复  引用  查看    
#232楼[楼主]2009-02-10 20:43 | cloudgamer      
@friedy
如果你下载的实例中样式没问题的话
就可能是你的页面的问题
或者你给个例子我看

  回复  引用  查看    
#233楼2009-02-16 10:08 | friedy      
访问这个链接:http://210.13.93.166/ebisstest/Forms/login.aspx" target="_new">http://210.13.93.166/ebisstest/Forms/login.aspx
用户名及密码:ADMIN

  回复  引用  查看    
#234楼[楼主]2009-02-16 10:17 | cloudgamer      
@friedy
看哪里

  回复  引用  查看    
#235楼2009-02-16 12:03 | friedy      
系统管理---》文件上传
  回复  引用  查看    
#236楼2009-02-16 12:04 | friedy      
哦,错了,是系统管理--->消息发送。
  回复  引用  查看    
#237楼[楼主]2009-02-16 13:53 | cloudgamer      
@friedy
打不开了

  回复  引用  查看    
#238楼2009-02-16 14:10 | friedy      
有QQ不?可以远程协助的
  回复  引用  查看    
#239楼[楼主]2009-02-16 14:18 | cloudgamer      
@friedy
那不行
工作中
你不能发个页面给我看吗

  回复  引用  查看    
#240楼2009-02-16 15:38 | friedy      
已发送至邮箱,对于由此给你带来的麻烦深表歉意。
  回复  引用  查看    
#241楼[楼主]2009-02-16 15:44 | cloudgamer      
@friedy
没深表歉意那么严重吧,交流交流而已
什么浏览器会有问题

  回复  引用  查看    
#242楼2009-02-16 15:46 | friedy      
IE的
  回复  引用  查看    
#243楼2009-02-16 15:47 | friedy      
6.0,其它浏览器兼容性没考虑,对日本人就这样,他们不提就没考虑
  回复  引用  查看    
#244楼[楼主]2009-02-16 17:00 | cloudgamer      
@friedy
建议你还是用file原来的样式算了

  回复  引用  查看    
#245楼2009-03-03 02:24 | 寒@鹏      
学习 呵呵
  回复  引用    
#246楼2009-03-07 10:57 | kiddik[未注册用户]
谢谢博主提供这么好的工具
js不太懂,请教下博主,我想在form中间加入一个文本框,并且有个判断,文本框必须填写内容并且选择上传了文件,开始上传按钮才生效。

  回复  引用  查看    
#247楼[楼主]2009-03-07 11:01 | cloudgamer      
@寒@鹏
@kiddik
谢谢支持
有没有文件你可以参考“没有添加文件”那个判断
至于文本框你就加个onchange看有没有内容咯
具体请自己研究吧

  回复  引用  查看    
#248楼2009-03-10 13:46 | 蒙山      
@woshi?
php文件大小有限制的php.ini文件有两处,默认是8M和2m需要改为上传的限制,如果文件太大,php会自动拒绝程序是检测不到的。

  回复  引用    
#249楼2009-03-12 11:31 | wanglei555555[未注册用户]
写的太好了
  回复  引用  查看    
#250楼[楼主]2009-03-18 19:51 | cloudgamer      
@蒙山
@wanglei555555
谢谢支持!!!

  回复  引用    
#251楼2009-03-23 11:56 | lee_889988[未注册用户]
我使用一个弹出窗口弹出FileUpload.htm页,上传完成以后我想得到FileUpload.htm的父窗体请问楼主怎么得到呀?parent得不到,top也得不到请问有什么方法可以解决吗?
  回复  引用    
#252楼2009-03-23 12:05 | lee_889988[未注册用户]
谢谢我得到了,搂住做的东西很黄很强大,再次感谢嘿嘿
  回复  引用    
#253楼2009-03-23 18:02 | 游客123456[未注册用户]
如果已经上传过同样名字的图片,则会覆盖掉。这个不太好
  回复  引用    
#254楼2009-03-23 18:56 | 若[未注册用户]
很好,很强大,谢谢博主,我会常来的
  回复  引用    
#255楼2009-03-23 19:21 | 若[未注册用户]
请问博主,上传含有中文名的文件时会出现乱码是怎么回事?
  回复  引用  查看    
#256楼[楼主]2009-03-23 19:55 | cloudgamer      
@lee_889988
谢谢支持

@游客123456
这个在实际应用中都会修改文件名,我这里只是给个例子就不用考虑太多了

  回复  引用  查看    
#257楼[楼主]2009-03-23 20:04 | cloudgamer      
@若
实际应用中文件没有用中文名没留意
下次再修正吧

  回复  引用    
#258楼2009-03-24 19:21 | 若[未注册用户]
@cloudgamer
在网上搜了一下,发现在web.config文件中的<System.web>节点下添加<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>配置项可以解决问题。

  回复  引用  查看    
#259楼[楼主]2009-03-24 19:48 | cloudgamer      
@若
这个我估计是前台是gb编码后台是utf造成的
把前台也改成utf应该就可以了,就不用改web.config
谢谢支持

  回复  引用    
#260楼2009-03-24 20:19 | 王若
@cloudgamer
我把charset设置成UTF-8上传依然是乱码。。。

  回复  引用  查看    
#261楼[楼主]2009-03-25 08:53 | cloudgamer      
@王若
我测试过可以的
不是单单改charset而是把页面属性的编码改为utf
或者你右键直接选utf编码不过这样页面会乱码(文件名不会乱码)

  回复  引用    
#262楼2009-03-25 10:37 | 王若
谢谢博主,终于搞定了O(∩_∩)O~
  回复  引用  查看    
#263楼2009-03-27 17:32 | 依依园地      
我用了一下,发现一个问题,那就是一个3K的图片上传却需要很长的时间,大概需要20-30秒,实际上文件很快的就上传成功,但是返回结果却需要很久。不知道博主自己试过没有,是不是也有这样的问题。
  回复  引用  查看    
#264楼[楼主]2009-03-27 17:44 | cloudgamer      
@依依园地
那是你第一次运行的时候吧
运行之后再试试

  回复  引用    
#265楼2009-03-28 17:30 | 3123456413231320[未注册用户]
那个检测是否有相同文件的的功能没用啊

  回复  引用  查看    
#266楼[楼主]2009-03-28 17:59 | cloudgamer      
@3123456413231320
可以吧
什么情况下不行

  回复  引用    
#267楼2009-04-02 12:03 | beckfun[未注册用户]
上传文件有数量限制吗?我把html的限制改成一百,后台File.ashx的限制取消了.但是上传5个文件,就一点反应也没有了,用的是.net版的
  回复  引用  查看    
#268楼[楼主]2009-04-02 13:50 | cloudgamer      
@beckfun
这个一般是服务器的上传限制
你可以看看服务器设置

  回复  引用    
#269楼2009-04-14 10:17 | Kyle.chen[未注册用户]
楼主你好,感谢你这么好的控件,功能也很好,能支持FF,但是我在用苹果浏览器safari的时候发现总是显示没有上传数据。如果再兼容苹果的浏览器safari就完美了。
  回复  引用  查看    
#270楼[楼主]2009-04-14 10:22 | cloudgamer      
@Kyle.chen
有空看看safari
我都没用过呢

  回复  引用    
#271楼2009-04-19 00:12 | Boating[未注册用户]
楼主,我是新手,用的是php版。请问应该如何使程序允许上传.html文件和.php文件呢?务必指教一下,急需解决这个问题。
  回复  引用  查看    
#272楼[楼主]2009-04-19 01:05 | cloudgamer      
@Boating
修改这里
ExtIn: ["jpg", "gif"],

  回复  引用    
#273楼2009-04-19 10:36 | Boating[未注册用户]
再请教一下楼主,我想让程序在上传文件后以客户端原文件名命名,该怎么修改?

我尝试过使$t=$f_name,又修改了$f_name=$_FILES[$f_input]['name'][$key]; 虽然上传后的确保存了原文件名,但在后面却又多加了一个扩展名。如原来是“01.jpg”,上传后就变成了“01.jpg.jpg”。请问楼主,如何才能解决这一问题?

  回复  引用  查看    
#274楼[楼主]2009-04-20 08:34 | cloudgamer      
@Boating
这个是后台的处理问题吧
我不懂php的,不好意思了

  回复  引用    
#275楼2009-05-13 21:52 | your fans[未注册用户]
逐一看完你的博文, 很多值得学习的地方。 希望有机会可以共同探讨学习。
  回复  引用  查看    
#276楼[楼主]2009-05-13 22:24 | cloudgamer      
@your fans
呵呵
欢迎交流

  回复  引用    
#277楼2009-05-18 22:31 | Hand[未注册用户]
楼主,你也太强悍了吧
  回复  引用  查看    
#278楼2009-05-19 13:31 | ddda      
太好了,收藏
  回复  引用  查看    
#279楼2009-05-21 10:51 | hhe      
LZ做的很好,为什么我发布到服务器 ,就不能上传了?一直在走进度条?难道是服务器设置问题?
  回复  引用  查看    
#280楼[楼主]2009-05-21 10:55 | cloudgamer      
@Hand
@ddda
谢谢支持

@hhe
你先本地试试
如果正常的话就是服务器设置问题了
可能是上传数据限制之类的

  回复  引用  查看    
#281楼2009-05-28 00:49 | chris_thanks      
--引用--------------------------------------------------
Kyle.chen: 楼主你好,感谢你这么好的控件,功能也很好,能支持FF,但是我在用苹果浏览器safari的时候发现总是显示没有上传数据。如果再兼容苹果的浏览器safari就完美了。
--------------------------------------------------------

强大的楼主 我在safari 和chrome 都出现了这个问题,请问有什么好办法解决一下,谢谢!

  回复  引用  查看    
#282楼[楼主]2009-05-28 16:56 | cloudgamer      
@chris_thanks
我测试了一下
这个是.net的问题哦
用asp版本就没有问题
数据确实是传过去了
但context.Request.Files却取不到数据
估计ms没有做好兼容
这是后台问题前台也没办法

  回复  引用    
#283楼2009-05-30 18:28 | 破解[未注册用户]
--引用--------------------------------------------------
王若: @cloudgamer
我把charset设置成UTF-8上传依然是乱码。。。
--------------------------------------------------------

  回复  引用  查看    
#284楼[楼主]2009-05-30 18:56 | cloudgamer      
@破解
这个问题已经解决了,请重新下载实例

  回复  引用  查看    
#285楼2009-06-03 01:36 | 猫狼      
可惜没有上传进度,上传文件不知道上传具体情况。。。
  回复  引用  查看    
#286楼[楼主]2009-06-03 08:25 | cloudgamer      
@猫狼
上传进度关键是后台
前台最多只是根据后台反映出来,前台本身是获取不了的

  回复  引用  查看    
#287楼2009-06-03 12:24 | 猫狼      
精神可佳,赞一个~~~~~~~
  回复  引用  查看    
#288楼2009-06-05 09:31 | SoftWareBoy      
楼主:你好
在点击添加文件时,弹出个选择文件的对话框是单选的,我想实现上传图片一次在多选。。。
请问怎么搞啊,我看了您的代码没有看到得到对话框中文件在本地的地址的处理。。

  回复  引用  查看    
#289楼[楼主]2009-06-05 09:35 | cloudgamer      
@SoftWareBoy
这个用js做不到的
改用flash吧

  回复  引用    
#290楼2009-06-16 13:26 | ecchua79[未注册用户]
楼主的代码知识好强大啊!刚刚试了一下,发现上载很快。
不过如果我要显示出已上载的文件供他人下载或修改的话,应该加上哪些代码呢?请楼主不吝赐教,谢谢!:)

  回复  引用  查看    
#291楼[楼主]2009-06-16 16:32 | cloudgamer      
@ecchua79
你说的跟这个上传文件关系不大了

  回复  引用    
#292楼2009-06-25 16:13 | cwmwss[未注册用户]
为什么 JSP的代码上传有点问题?
将这两个页放在其它项目中上传不了。单独新建项目可以。
而且好像不兼容FF.

.NET的代码都测试OK

  回复  引用  查看    
#293楼[楼主]2009-06-25 16:18 | cloudgamer      
@cwmwss
这个就不清楚了
我jsp一点也不懂的

  回复  引用    
#294楼2009-06-25 16:47 | cwmwss[未注册用户]
@cloudgamer
放在其它项目的时候,好像找不到action="file.jsp"这个jsp文件。
单独的就执行了。
难道我的tomcat有问题。。。

  回复  引用  查看    
#295楼[楼主]2009-06-25 16:59 | cloudgamer      
@cwmwss
这个你问问其他人吧
如果真的有问题最好也帮我修正一下
我自己也不会弄

  回复  引用    
#296楼2009-07-01 13:54 | daleho[未注册用户]
博主你好,我想在上传文件的同时把文件名,文件大小的数据保存到数据库里面应该在什么位置添加数据库代码???请赐教!
  回复  引用  查看    
#297楼[楼主]2009-07-01 13:58 | cloudgamer      
@daleho
如果是原文件的文件名和文件大小都可以在后台通过文件数据获取啊

  回复  引用    
#298楼2009-07-01 14:32 | daleho[未注册用户]
感谢楼主的回复这么快,不过我是在你那个ashx文件内的文件上传代码上面加的,结果并没有添加到数据库!
  回复  引用  查看    
#299楼[楼主]2009-07-01 14:35 | cloudgamer      
@daleho
我那个本身就没有数据库功能,这个你自己扩展吧
跟上传本身也关系不大

  回复  引用    
#300楼2009-07-01 14:41 | daleho[未注册用户]
我把数据库建立好的,在file.ashx文件里面,利用file.FileName这个得到文件名等信息,在file.SaveAs上面加入了数据添加命令,是不是这样不对?
还是必须要重新建立一个什么东东!我是新手,对asp.net不是很熟悉!

  回复  引用  查看    
#301楼[楼主]2009-07-01 15:07 | cloudgamer      
@daleho
那这个你要问熟悉的人咯
你这个是后台问题不是前台问题了

评论共3页: 上一页 1 2 3 
发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1314766




相关文章:

相关链接: