❶ 多文件上传php怎么写
方法一:当多文件上传表单中多个上传文件的name属性为“pic[]”形式时,也即表单为这种形式。
HTML代码:
1<formaction=""method="post"enctype="multipart/form-data">
2<inputtype="hidden"name="MAX_FILE_SIZE"value="">
3<inputtype="file"name="pic[]"/><br><br>
4<inputtype="file"name="pic[]"/><br><br>
5<inputtype="file"name="pic[]"/><br><br>
6<inputtype="file"name="pic[]"/><br><br>
7<inputtype="submit"value="upload"/>
8</form>
PHP代码:
01<?php
02//1.获取要上传文件的信息
03$up_info=$_FILES['pic'];
04
05$ob_path="../system";
06
07$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png");//定义运行的上传文件类型
08
09
10for($i=0;$i<count($up_info['name']);$i++){//foreach循环处理多个文件上传
11//2.判断文件是否上传错误
12
13if($up_info['error'][$i]>0){
14switch($up_info['error'][$i]){
15case1:
16$err_info="上传的文件超过了php.ini中upload_max_filesize选项限制的值";
17break;
18case2:
19$err_info="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
20break;
21case3:
22$err_info="文件只有部分被上传";
23break;
24case4:
25$err_info="没有文件被上传";
26break;
27case6:
28$err_info="找不到临时文件夹";
29break;
30case7:
31$err_info="文件写入失败";
32break;
33default:
34$err_info="未知的上传错误";
35break;
36}
37continue($err_info);
38}
39
40
41//3.判断文件上传的类型是否合法
42
43if(!in_array($up_info['type'][$i],$typelist)){
44continue('文件类型错误!'.$up_info['type'][$i]);
45}
46
47//4.上传文件的大小过滤
48
49if($up_info['size'][$i]>1000000){
50continue('文件大小超过1000000');
51}
52
53
54//5.上传文件名处理
55
56$exten_name=pathinfo($up_info['name'][$i],PATHINFO_EXTENSION);
57
58do{
59$main_name=date('YmHis'.'--'.rand(100,999));
60$new_name=$main_name.'.'.$exten_name;
61}while(file_exists($to_path.'/'.$new_name));
62
63
64
65//6.判断是否是上传的文件,并执行上传
66
67if(is_uploaded_file($up_info['tmp_name'][$i])){
68
69if(move_uploaded_file($up_info['tmp_name'][$i],$ob_path.'/'.$new_name)){
70echo'文件上传成功!';
71}else{
72echo'上传文件移动失败!';
73}
74}else{
75echo'文件不是上传的文件';
76}
77
78}//for循环的括号
方法二:当多文件上传表单中多个上传文件的name属性为“pic,text,doc,pdf”形式时
也即表单为这种形式:
1<formaction=""method="post"enctype="multipart/form-data">
2<inputtype="hidden"name="MAX_FILE_SIZE"value="">
3<inputtype="file"name="pic"/><br><br>
4<inputtype="file"name="text"/><br><br>
5<inputtype="file"name="doc"/><br><br>
6<inputtype="file"name="pdf"/><br><br>
7
8<inputtype="submit"value="upload"/>
9</form>
01//1.获取要上传文件的信息
02$up_info=$_FILES;
03
04$ob_path="..system";
05
06$typelist=array("image/gif","image/jpeg","image/pjpeg","image/png");//定义运行的上传文件类型
07
08
09
10foreach($up_infoas$k_name=>$value){//用foreach循环处理多个文件的上传
11//2.判断文件是否上传错误
12
13if($up_info[$k_name]['error']>0){
14switch($up_info['error'][$i]){
15case1:
16$err_info="上传的文件超过了php.ini中upload_max_filesize选项限制的值";
17break;
18case2:
19$err_info="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
20break;
21case3:
22$err_info="文件只有部分被上传";
23break;
24case4:
25$err_info="没有文件被上传";
26break;
27case6:
28$err_info="找不到临时文件夹";
29break;
30case7:
31$err_info="文件写入失败";
32break;
33default:
34$err_info="未知的上传错误";
35break;
36}
37continue($err_info);
38}
39
40
41//3.判断文件上传的类型是否合法
42
43if(!in_array($up_info[$k_name]['type'],$typelist)){
44continue('文件类型错误!'.$up_info[$k_name]['type']);
45}
46
47//4.上传文件的大小过滤
48
49if($up_info[$k_name]['size']>100000){
50echo'文件大小超过**';
51continue;
52}
53
54
55//5.上传文件名处理
56
57$exten_name=pathinfo($up_info[$k_name]['name'],PATHINFO_EXTENSION);
58
59do{
60$main_name=date('YmHis'.'--'.rand(100,999));
61$new_name=$main_name.'.'.$exten_name;
62}while(file_exists($to_path.'/'.$new_name));
63
64
65//6.判断是否是上传的文件,并执行上传
66
67if(is_uploaded_file($up_info[$k_name]['tmp_name'])){
68
69if(move_uploaded_file($up_info[$k_name]['tmp_name'],$ob_path.'/'.$new_name)){
70echo'文件上传成功!';
71}else{
72echo'上传文件移动失败!';
73}
74}else{
75echo'文件不是上传的文件';
76}
77
78}//for循环的括号
方法三:先定义单个文件上传的函数,再循环调用这个函数,每次传入一个文件的上传信息,也可以到达多文件上传的目的,而且这种方式,更容易理解。
1<formaction=""method="post"enctype="multipart/form-data">
2<inputtype="hidden"name="MAX_FILE_SIZE"value="">
3<inputtype="file"name="pic1"><br>
4<inputtype="file"name="pic2"><br>
5<inputtype="file"name="pic3"><br>
6<inputtype="submit"value="upload">
7</form>
001/*
002*单文件上传函数
003*@paramarray$up_info记录上传文件信息的超全局数组
004*@paramstring$to_path上传文件的目标路径
005*@paramarray$typlist允许的文件类型
006*@paramint$file_size允许的文件大小
007*@returnstring上传失败,返回失败的原因,
008*http://yige.org/php/
009*成功返回包括文件名的路径。
010*/
011
012
013functionupload_fun($up_info,$to_path,$typelist=array(),$file_size=2000000){
014
015//1.判断文件上传是否错误
016
017if($up_file['error']>0){
018switch($up_info['error']){
019case1:
020$err_info="上传的文件超过了php.ini中upload_max_filesize选项限制的值";
021break;
022case2:
023$err_info="上传文件的大小超过了HTML表单中MAX_FILE_SIZE选项指定的值";
024break;
025case3:
026$err_info="文件只有部分被上传";
027break;
028case4:
029$err_info="没有文件被上传";
030break;
031case6:
032$err_info="找不到临时文件夹";
033break;
034case7:
035$err_info="文件写入失败";
036break;
037default:
038$err_info="未知的上传错误";
039break;
040}
041
042return$err_info;
043die();
044}
045
046
047//2.判断上传文件类型是否合法
048
049if(count($typelist)>0){
050if(!in_array($up_info['type'],$typelist)){
051
052$err_info='文件类型不合法!'.$up_info['type'];
053return$err_info;
054die();
055}
056}
057
058//4.判断上传文件大小是否超出允许值
059
060if($up_info['size']>$file_size){
061
062return$err_info='文件大小超过'.$file_size;
063die();
064}
065
066//5.上传文件重命名
067
068$exten_name=pathinfo($up_info['name'],PATHINFO_EXTENSION);
069
070do{
071$main_name=date('YmHis'.'--'.rand(100,999));
072$new_name=$main_name.'.'.$exten_name;
073}while(file_exists($to_path.'/'.$new_name));
074
075//6.判断是否是上传的文件,并移动文件
076
077if(is_uploaded_file($up_info['tmp_name'])){
078
079if(move_uploaded_file($up_info['tmp_name'],$to_path.'/'.$new_name)){
080
081$err_info=$to_path.'/'.$new_name;
082return$err_info;
083die();
084}else{
085
086return$err_info='上传文件移动失败!';
087die();
088
089}
090}else{
091
092return$err_info='这个文件不是上传文件!';
093die();
094}
095
096}
097
098//函数使用方法如下
099
100$multi_info=$_FILES;//接收$_FILES的全部上传信息
101
102$to_path='system';//上传文件的目标路径
103
104foreach($multi_infoas$name=>$up_info){//foreach遍历$multi_info
105
106$err_info=upload_fun($up_info,$to_path);//调用单文件上传函数
107
108p($err_info);//输出返回信息;
109
110}
❷ Springmvc的几种多附件上传方式
1.单文件上传
1.1、页面
文件上传需要将表单的提交方法设置为post,将enctype的值设置为”multipart/form-data”。
<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="img"><br />
<input type="submit" name="提交">
</form>
1.2 控制器
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
// 这里的MultipartFile对象变量名跟表单中的file类型的input标签的name相同,
//所以框架会自动用MultipartFile对象来接收上传过来的文件,
//当然也可以使用@RequestParam("img")指定其对应的参数名称
public String upload(MultipartFile img, HttpSession session)
throws Exception {
// 如果没有文件上传,MultipartFile也不会为null,可以通过调用getSize()方法获取文件的大小来判断是否有上传文件
if (img.getSize() > 0) {
// 得到项目在服务器的真实根路径,如:/home/tomcat/webapp/项目名/images
String path = session.getServletContext().getRealPath("images");
// 得到文件的原始名称,如:美女.png
String fileName = img.getOriginalFilename();
// 通过文件的原始名称,可以对上传文件类型做限制,如:只能上传jpg和png的图片文件
if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
File file = new File(path, fileName);
img.transferTo(file);
return "/success.jsp";
}
}
return "/error.jsp";
}
}
1.3springmvc.xml配置
<!-- 注意:CommonsMultipartResolver的id是固定不变的,一定是multipartResolver,不可修改 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 如果上传后出现文件名中文乱码可以使用该属性解决 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 单位是字节,不设置默认不限制总的上传文件大小,这里设置总的上传文件大小不超过1M(1*1024*1024) -->
<property name="maxUploadSize" value="1048576"/>
<!-- 跟maxUploadSize差不多,不过maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小 -->
<property name="maxUploadSizePerFile" value="1048576"/>
</bean>
2.多文件上传
2.1页面
<form action="${pageContext.request.contextPath}/test/upload.do" method="post" enctype="multipart/form-data">
file 1 : <input type="file" name="imgs"><br />
file 2 : <input type="file" name="imgs"><br />
file 3 : <input type="file" name="imgs"><br />
<input type="submit" name="提交">
</form>
2.2控制器
@Controller
@RequestMapping("/test")
public class MyController {
@RequestMapping(value = "/upload.do", method = RequestMethod.POST)
// 这里的MultipartFile[] imgs表示前端页面上传过来的多个文件,imgs对应页面中多个file类型的input标签的name,
// 但框架只会将一个文件封装进一个MultipartFile对象,
// 并不会将多个文件封装进一个MultipartFile[]数组,直接使用会报[Lorg.springframework.web.multipart.MultipartFile;.<init>()错误,
// 所以需要用@RequestParam校正参数(参数名与MultipartFile对象名一致),当然也可以这么写:@RequestParam("imgs") MultipartFile[] files。
public String upload(@RequestParam MultipartFile[] imgs, HttpSession session)
throws Exception {
for (MultipartFile img : imgs) {
if (img.getSize() > 0) {
String path = session.getServletContext().getRealPath("images");
String fileName = img.getOriginalFilename();
if (fileName.endsWith("jpg") || fileName.endsWith("png")) {
File file = new File(path, fileName);
img.transferTo(file);
}
}
}
return "/success.jsp";
}
}
2.3springmvc.xml配置
<!-- 注意:CommonsMultipartResolver的id是固定不变的,一定是multipartResolver,不可修改 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 如果上传后出现文件名中文乱码可以使用该属性解决 -->
<property name="defaultEncoding" value="utf-8"/>
<!-- 单位是字节,不设置默认不限制总的上传文件大小,这里设置总的上传文件大小不超过1M(1*1024*1024) -->
<property name="maxUploadSize" value="1048576"/>
<!-- 跟maxUploadSize差不多,不过maxUploadSizePerFile是限制每个上传文件的大小,而maxUploadSize是限制总的上传文件大小 -->
<property name="maxUploadSizePerFile" value="1048576"/>
</bean>
扩展:
/*
* 通过流的方式上传文件
* @RequestParam("file") 将name=file控件得到的文件封装成CommonsMultipartFile 对象
*/
/*
* 采用file.Transto 来保存上传的文件
*/
/*
*采用spring提供的上传文件的方法
*/
❸ form标签中哪个属性是文件上传必不可少的(
一,文件上传三要素:
1.表单提交方式:post (get方式提交有大小限制,post没有)
2.表单的enctype属性:必须设置为multipart/form-data.
根据HTTP协议的规定,浏览器每次向后台提交参数,都会对参数进行统一的编码,默认采用的编码格式是urlencoded,这种编码格式只能对文本数据进行编码,浏览器每次向后台提交参数,都会先把所有参数转化成字符串,然后对这些数据统一进行urlencode编码,
3.表单必须有文件上传项:file
❹ HTML文件上传
使用 input ,指定类型为 file ,来完成文件上传功能。
多文件上传需要在标签上添加 mulyiple 属性:
使用 accept 属性来限制上传文件的类型,当然这么做任然是不可靠的,还需要后端做进一步的判断。
如果我们是用户,当我们上传了一张图片,却只显示了几个文字,是不是很不爽,那我们怎么来实现预览功能呢?
我们可以使用 FileReader 将图像转换为二进制字符串,然后添加 load 事件监听,在文件上传成功后获取二进制字符串。
显示文件上册进度 来提高用户体验
FileReader 还有一个 progress 事件,表示当前上传进度,配合HTML5的 progress 标签,我们来模拟一下文件的上传进度。
❺ 如何通过js完成多个文件的上传
HTML5 file组件的新属性
accept : 如果在file组件中增加这个属性就可以直接控制上传的文件类型了,实在是很方便。
multiple:是否允许选择多个文件
HTML5 页面代码修改后
<img width="400" height="250"/><br />
<input type="file" id="pic" name="pic" onchange="printFileInfo()" accept="image/*" multiple="multiple"/>
<input type="button" value="上传图片" onclick="uploadFile()" /><br />
<div id="parent">
<div id="son"></div>
</div>
accept 的值可以参阅:IANA MIME 类型(标准 MIME 类型的完整列表),如果使用的是DW开发的话,软件本身就有提示。
如果选择了多个文件,可以用JS做循环打印,看看文件的名称,类型和大小,看演示代码
function printFileInfo(){
var picFile = document.getElementById("pic");
var files = picFile.files;
for(var i=0; i<files.length; i++){
var file = files[i];
var div = document.createElement("div")
div.innerHTML = "第("+ (i+1) +") 个文件的名字:"+ file.name +
" , 文件类型:"+ file.type +" , 文件大小:"+ file.size
document.body.appendChild( div)
}
}
既然可以循环多文件的话,就可以尝试多文件上传了。
1、首先创建 XMLHttpRequest 对象
//这是全局变量。因为是示例,所以就没有判断浏览器类型,低版本IE这么写的话会出问题的
var xhr = new XMLHttpRequest()
2、上篇介绍了进度事件(Progress) , 这次实现 progress 和 error 2个事件
error:在请求发生错误时触发。
对应上传时发生错误导致的上传失败:uploadFailed()
//上传失败
function uploadFailed(evt) {
alert("上传失败");
}
progress:在接收相应期间持续不断触发。
对应上传进度方法:onprogress()
/**
* 侦查附件上传情况 ,这个方法大概0.05-0.1秒执行一次
*/
function onprogress(evt){
var loaded = evt.loaded; //已经上传大小情况
var tot = evt.total; //附件总大小
var per = Math.floor(100*loaded/tot); //已经上传的百分比
$("#son").html( per +"%" );
$("#son").css("width" , per +"%");
}
最后就是上传方法了,注意上面的html代码中上传用的方法也需要改成这个uploadFile()方法才能正常使用。
//上传文件
function uploadFile() {
//将上传的多个文件放入formData中
var picFileList = $("#pic").get(0).files;
var formData = new FormData();
for(var i=0; i< picFileList.length; i++){
formData.append("file" , picFileList[i] );
}
//监听事件
xhr.upload.addEventListener("progress", onprogress, false);
xhr.addEventListener("error", uploadFailed, false);//发送文件和表单自定义参数
xhr.open("POST", "upload");
//记得加入上传数据formData
xhr.send(formData);
}
❻ bootstrap 多文件上传
```
<link href="/static/backend/css/fileinput.css" rel="stylesheet" />
<script src="/static/backend/js/fileinput.js"></script>
<link href="/static/backend/css/fileinput.min.css" rel="stylesheet" />
<script src="/static/backend/js/fileinput.min.js"></script>
<div class="file-loading">
<input type="file" id="myfile" name="myfile[]" multiple data-allowed-file-extensions='["csv"]'/>//只能是csv 文件。 name=myfile[] 可以上传多个文件
</div>
</div>
Js
$("#myfile").fileinput({
uploadUrl: "/backend/home/upload", //上传地址
uploadAsync: false, //设置上传同步异步 此为同步
showUpload: true,
showRemove: true,
// showClose: true,
maxFileCount: 10, //表示允许同时上传的最大文件个数
/* layoutTemplates:{
actionDelete: ''
},
browseClass: 'btn btn-primary'*/
});
后台/backend/home/upload
public function upload(){
var_mp($_FILES['myfile']);
foreach ($_FILES["myfile"]['tmp_name'] as$k =>$v){
move_uploaded_file($v,ROOT_PATH.'public'.DS.'uploads'.DS.$_FILES['myfile']['name'][$k]);
Uploads要自己创建好文件夹
}
return 1; // 上传后要返回1
}
```
<input type="file" id="myfile" name="myfile" multiple 控制可以上传多个 data-allowed-file-extensions='["csv"]'/>
当点击上传后,报错,提示你必须选择最少X个文件上传。
input标签元素属性:data-min-file-count="2" 设置为X个文件,限制上传文件数。
data-allowed-file-extensions= '["csv"]'
限定上传什么文件。
❼ springboot多文件上传
MultipartFile提供了以下方法来获取上传文件的信息:
getOriginalFilename,获取上传的文件名字;
getBytes,获取上传文件内容,转为字节数组;
getInputStream,获取一个InputStream;
isEmpty,文件上传内容为空,或者根本就没有文件上传;
getSize,文件上传的大小。
transferTo(File dest),保存文件到目标文件系统;
同时上传多个文件,则使用MultipartFile数组类来接受多个文件上传:
//多文件上传 @RequestMapping(value = "/batch/upload", method = RequestMethod.POST)
@ResponseBody public String handleFileUpload(HttpServletRequest request){
List<MultipartFile> files = ((MultipartHttpServletRequest) request)
.getFiles("file");
MultipartFile file = null;
BufferedOutputStream stream = null;
for (int i = 0; i < files.size(); ++i) {
file = files.get(i);
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
stream = new BufferedOutputStream(new FileOutputStream(
new File(file.getOriginalFilename())));
stream.write(bytes);
stream.close();
} catch (Exception e) {
stream = null;
return "You failed to upload " + i + " => " + e.getMessage();
}
} else {
return "You failed to upload " + i
+ " because the file was empty.";
}
}
return "upload successful";
}
可以通过配置application.properties对SpringBoot上传的文件进行限定默认为如下配置:
spring.servlet.multipart.enabled=true
spring.servlet.multipart.file-size-threshold=0
spring.servlet.multipart.location=
spring.servlet.multipart.max-file-size=1MB
spring.servlet.multipart.max-request-size=10MB
spring.servlet.multipart.resolve-lazily=false
enabled默认为true,既允许附件上传。
file-size-threshold限定了当上传文件超过一定长度时,就先写到临时文件里。有助于上传文件不占用过多的内存,单位是MB或KB,默认0,既不限定阈值。
location指的是临时文件的存放目录,如果不设定,则web服务器提供一个临时目录。
max-file-size属性指定了单个文件的最大长度,默认1MB,max-request-size属性说明单次HTTP请求上传的最大长度,默认10MB.
resolve-lazily表示当文件和参数被访问的时候再被解析成文件。
❽ jquery uploadify 能且只能上传一个文件 该如何设置属性
你是不是想每次只能上传一个文件?
multi为是否开启多文件上传的设置,true为开启,默认为false关闭。
'multi': true,
可参考我空间的jquery uploadify for asp 的demo文章。
❾ 设置文件的文档属性
文档属性就是给文档增加一些特定属性,以满足一些特殊需要。例如,单位里有大量的档案需要管理,那么就可以给这些文件设置作者、入库时间、存储位置等属性,以方便档案的管理。
在多可文档管理系统中,有两个默认的文档属性:文档编号和重要程度。同时,多可系统也支持增加和修改文档属性。用户可以在上传文件的时候设置文档属性,也可以上传以后再增加或修改文档属性。
上传单个文件和批量上传都可以在上传时设置属性,粘贴上传不能在上传时设置属性。
上传单个文件设置属性的是在上传选择页面里设置的(如下图):
记得要勾选 “设置文件属性” 这项,然后就可以设置相应的属性。上图中有两个属性,可以都设,也可以只设一项。
批量上传时,也记得要勾选传输条件设置窗口中的“文件属性”(如下图)。勾选后,会弹出属性设置窗口,在其中设置相应属性。
要注意的是,如果在批量上传时设置了文件属性,那么这批上传的文件会共用这个属性。
如果上传文件时忘记设置文档属性,那么上传文件后,可以通过修改文件的文档属性来设置属性。
文档属性的修改只能一次修改一个文件的属性,不能对一批文件进行修改。
修改文档属性的方法是:
1、 选中一个文件;
2、 点击菜单区的“详细”;
3、 该文件的详细信息及管理页面打开后,选择其中的“文件属性”;
4、 该页面上就会出现文件属性设置区,用户可以在这里修改或设置属性。
❿ 多文件上传思路
给个例子吧:传几个地图文件到服务器
1)aspx文件:
<%@ Page language="c#" Codebehind="AddMap.aspx.cs" AutoEventWireup="false" Inherits="ZiFengLast.SystemSet.AddMap" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>MapAdmin</title>
<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
<meta content="C#" name="CODE_LANGUAGE">
<meta content="javaScript" name="vs_defaultClientScript">
<meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
<LINK href="../StyleSheet1.css" type="text/css" rel="stylesheet">
<script language="javascript">
function AddFile()
{
var rows=document.getElementById("rows").value;
var cols=document.getElementById("cols").value;
var FileList=document.getElementById("MyFile");
if(document.getElementById("MyFile").innerHTML.toString().length>200)
{
// alert(document.getElementById("MyFile").innerHTML.toString().length);
FileList.innerHTML="<font class='TagTitle'><b>第1个地图:</b></font> <input style='WIDTH: 200px; HEIGHT: 22px' type='file' size='14' name='File'>";
}
for(i=1;i<cols*rows;i++)
{
j=i+1;
var str ='<font class="TagTitle"><b>第'+j+'个地图:</b></font> <input style="WIDTH: 200px; HEIGHT: 22px" type="file" size="14" name="File">';
FileList.insertAdjacentHTML("beforeEnd","<br>");
FileList.insertAdjacentHTML("beforeEnd",str);
}
}
</script>
</HEAD>
<body MS_POSITIONING="GridLayout">
<form id="Form1" method="post" encType="multipart/form-data" runat="server">
<FONT face="宋体">
<TABLE id="Table1" style="BORDER-RIGHT: #33cc66 2px groove; BORDER-TOP: #33cc66 2px groove; Z-INDEX: 101; LEFT: 136px; BORDER-LEFT: #33cc66 2px groove; BORDER-BOTTOM: #33cc66 2px groove; POSITION: absolute; TOP: 32px"
width="500" align="center">
<TBODY>
<TR height="20">
<TD width="11%"></TD>
<TD width="11%"></TD>
<TD width="11%"></TD>
<TD width="11%"></TD>
<TD width="11%"></TD>
<TD width="11%"></TD>
<TD width="34%"></TD>
</TR>
<TR>
<TD colSpan="2"></TD>
<TD colSpan="4"><FONT class="WelcomeText" face="幼圆" color="#ff00ff" size="4">添加新地图</FONT></TD>
</TR>
<tr>
<td class="TagTitle" align="right" colSpan="3"><b>请选择地图规格:</b></td>
<td class="TagTitle" colSpan="2"><input id="rows" style="WIDTH: 32px; HEIGHT: 22px" type="text" size="1" value="1" runat="server"
NAME="rows">行<input id="cols" style="WIDTH: 32px; HEIGHT: 22px" type="text" size="1" value="1" runat="server"
NAME="cols">列</td>
<td colSpan="2"><input style="WIDTH: 72px; HEIGHT: 22px" onclick="AddFile()" type="button" value="确定"></td>
</tr>
<TR>
<TD class="TagTitle" align="right" width="33%" colSpan="3"><B>请选择地图文件:</B>
</TD>
<TD class="TagTitle" width="33%" colSpan="4"></TD>
</TR>
<tr>
<td colSpan="7">
<p id="MyFile"><font class="TagTitle"><b>第1个地图:</b></font>
<input style="WIDTH: 200px; HEIGHT: 22px" type="file" size="14" name="File">
</p>
</td>
<TR>
<TD class="TagTitle" align="right" width="33%" colSpan="3"><B>请输入地图存储名称:</B>
</TD>
<TD class="TagTitle" align="left" width="33%" colSpan="4"><INPUT id="MapName" style="WIDTH: 128px; HEIGHT: 22px" type="text" size="16" name="Password"
runat="server">
<asp:requiredfieldvalidator id="RequiredFieldValidator2" runat="server" CssClass="TagTitle" ErrorMessage="地图名不能为空"
Font-Names="微软雅黑" Font-Size="X-Small" ControlToValidate="MapName"></asp:requiredfieldvalidator></TD>
</TR>
<TR>
<TD class="TagTitle" style="HEIGHT: 29px" align="right" width="33%" colSpan="3"><B><asp:label id="Msg0" runat="server"></asp:label></B>
</TD>
<TD class="TagTitle" style="HEIGHT: 29px" width="33%" colSpan="4"><span class="ErrorMessage" id="OutputSpan" runat="server"><asp:label id="Msg" runat="server"></asp:label></span></TD>
</TR>
<TR>
<TD width="11%"></TD>
<TD width="11%"></TD>
<TD width="22%" colSpan="4">
<asp:button id="SubmitButton" runat="server" Font-Names="微软雅黑" Font-Size="X-Small" Text="提交"
Height="26px" Width="60px"></asp:button><INPUT id="CancelButton" style="FONT-SIZE: x-small; WIDTH: 60px; FONT-FAMILY: 微软雅黑; HEIGHT: 26px"
type="reset" value="清除" name="CancelButton"></TD>
<TD width="34%">
</TD>
</TR>
</TBODY>
</TABLE>
<TABLE id="Table2" style="Z-INDEX: 102; LEFT: 136px; WIDTH: 491px; POSITION: absolute; TOP: 8px; HEIGHT: 26px"
width="491" align="center">
<TR>
<TD class="TagTitle"><A href="DeleteMap.aspx"><FONT class="WelcomeText" face="幼圆">删除已有地图</FONT></A></TD>
</TR>
</TABLE>
</FONT>
</form>
</TR></TBODY></TABLE></FONT>
</body>
</HTML>
2)后台cs文件:关键是使用Request.Files获取刚上传的文件:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.Configuration;
namespace ZiFengLast.SystemSet
{
/// <summary>
/// MapAdmin 的摘要说明。
/// </summary>
public class AddMap : System.Web.UI.Page
{
protected System.Web.UI.WebControls.Button SubmitButton;
protected System.Web.UI.WebControls.RequiredFieldValidator RequiredFieldValidator2;
protected System.Web.UI.HtmlControls.HtmlGenericControl OutputSpan;
protected System.Web.UI.WebControls.Label Msg;
protected System.Web.UI.WebControls.Label Msg0;
protected System.Data.SqlClient.SqlConnection MapConn;
protected System.Data.SqlClient.SqlCommand MapComm;
protected System.Web.UI.HtmlControls.HtmlInputText rows;
protected System.Web.UI.HtmlControls.HtmlInputText cols;
protected System.Web.UI.HtmlControls.HtmlInputText MapName;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
}
#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void InitializeComponent()
{
this.MapConn = new System.Data.SqlClient.SqlConnection();
this.MapComm = new System.Data.SqlClient.SqlCommand();
this.SubmitButton.Click += new System.EventHandler(this.SubmitButton_Click);
//
// MapConn
//
this.MapConn.ConnectionString =System.Configuration.ConfigurationSettings.AppSettings["sqlMap"];
//
// MapComm
//
this.MapComm.Connection = this.MapConn;
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private void SubmitButton_Click(object sender, System.EventArgs e)
{
try
{
HttpFileCollection file=Request.Files;
System.Text.StringBuilder FileNameArray=new System.Text.StringBuilder();
string SaveName=this.MapName.Value.Trim();
string FileExtension0=System.IO.Path.GetExtension(System.IO.Path.GetFileName(file[0].FileName));
for(int i=0;i<file.Count;i++)
{
HttpPostedFile PostFile=file[i];
string FileName=System.IO.Path.GetFileName(PostFile.FileName);
FileName.Replace(";","_");
string FileExtension=System.IO.Path.GetExtension(FileName);
string ContentType=PostFile.ContentType.ToString();
string LastSaveName=SaveName+(i+1).ToString()+FileExtension;
PostFile.SaveAs(Request.MapPath("../Map/"+LastSaveName));
FileNameArray.Append(LastSaveName);
FileNameArray.Append(";");
}
this.MapComm.CommandText="Select [Map].* from [Map] where MapName='"+SaveName+"'";
this.MapConn.Open();
System.Data.SqlClient.SqlDataReader rd=this.MapComm.ExecuteReader();
if(rd.Read())
{
this.MapConn.Close();
this.MapConn.Dispose();
this.MapComm.Dispose();
rd.Close();
Msg0.Text="<font class=ErrorMessage>上传文件失败!</font>";
Msg.Text="<font class=ErrorMessage>已有该地图名称,请指定另外的名称</font>";
}
else
{
rd.Close();
this.MapComm.CommandText="insert into [Map](MapName,MapRows,MapCols,MapFileNames) Values('"+SaveName+"',"+int.Parse(rows.Value)+","+int.Parse(cols.Value)+",'"+FileNameArray+"')";
//Response.Write(MapComm.CommandText);
this.MapComm.ExecuteNonQuery();
this.MapConn.Close();
this.MapConn.Dispose();
this.MapComm.Dispose();
}
Msg0.Text="<font class=ErrorMessage>上传文件成功!</font>";
Msg.Text="<font class=ErrorMessage>共计上传文件"+file.Count.ToString()+"个"+"<br>"+FileNameArray+"</font>";
}
catch(Exception ee)
{
Msg0.Text="<font class=ErrorMessage>上传文件失败!</font>";
Msg.Text="<font class=ErrorMessage>"+ee.ToString()+"</font>";
}
}
}
}