❶ 多文件上傳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>";
}
}
}
}