ASPX ยอมรับไฟล์ของหน้า ASPX นั้นง่ายมากเพียงแค่ใช้ htmlinputfile มันก็ใช้ได้ แต่ถ้าคุณยอมรับไฟล์โพสต์หน้า HTML
มันไม่ง่ายมากที่จะจัดการกับวิธีการของ ASP ดังต่อไปนี้
เนื้อหาไฟล์, ประเภท, ขนาด, ตำแหน่งการจัดเก็บที่กำหนดเองใน conmfig.xml
เนื้อหาของหน้า html: (จาก fckeditor)
<html>
<head>
<title> fckeditor -uploaders ทดสอบ </title>
<ภาษาสคริปต์ = "JavaScript">
ฟังก์ชั่น sendfile ()
-
var suploaderUrl = cmbuploaderUrl.value;
if (suploaderUrl.length == 0)
SUPLOADERURL = TXTCUSTOMALL.VALUE;
if (suploaderUrl.length == 0)
-
การแจ้งเตือน ('โปรดระบุ URL ที่กำหนดเองของคุณหรือเลือกค่าเริ่มต้น');
กลับ;
-
eurl.innerhtml = suploaderurl;
txturl.value = '';
frmupload.action = suploaderurl;
frmupload.submit ();
-
ฟังก์ชั่น onuploadcompleted (errornumber, fileurl, ชื่อไฟล์, custmssg)
-
สวิตช์ (errornumber)
-
กรณี 0: // ไม่มีข้อผิดพลาด
txturl.value = fileUrl;
การแจ้งเตือน ('ไฟล์อัปโหลดโดยไม่มีข้อผิดพลาด');
หยุดพัก;
กรณีที่ 1: // ข้อผิดพลาดที่กำหนดเอง
การแจ้งเตือน (custmssg);
หยุดพัก;
กรณีที่ 10: // คำเตือนที่กำหนดเอง
txturl.value = fileUrl;
การแจ้งเตือน (custmssg);
หยุดพัก;
กรณี 201:
txturl.value = fileUrl;
การแจ้งเตือน ('ไฟล์ที่มีชื่อเดียวกันคือ Almedy พร้อมใช้งานไฟล์อัปโหลดได้เปลี่ยนชื่อเป็น "' + filename + '"');
หยุดพัก;
กรณีที่ 202:
การแจ้งเตือน ('ไฟล์ไม่ถูกต้อง');
หยุดพัก;
กรณี 203:
การแจ้งเตือน ("ข้อผิดพลาดด้านความปลอดภัยคุณอาจจะไม่ได้รับสิทธิ์ไม่เพียงพอที่จะอัปโหลดโปรดตรวจสอบเซิร์ฟเวอร์ของคุณ");
หยุดพัก;
ค่าเริ่มต้น:
การแจ้งเตือน ('ข้อผิดพลาดในการอัปโหลดไฟล์หมายเลข ERIC:' + ErrorNumber);
หยุดพัก;
-
-
</script>
</head>
<body>
<table cellspacing = "0" cellpadding = "0">
<tr>
<td>
<table cellspacing = "0" cellpadding = "0">
<tr>
<td now4>
เลือก "ไฟล์อัปโหลด" ที่จะใช้: <br>
<select id = "cmbupploaderUrl" name = "select1">
<ตัวเลือกเลือก value = "ASP/upload.asp"> ASP </potion>
<ตัวเลือกค่า = "php/upload.php"> php </portion>
<ตัวเลือกค่า = "upload.aspx? type = image"> aspx </opovie>
</เลือก>
</td>
<TD Now44 & nbsp;
<td>
URL อัปโหลดแบบกำหนดเอง: <br>
<อินพุต id = "txtCustomall" ปิดใช้งาน type = "text">
</td>
</tr>
</table>
<br>
<table cellspacing = "0" cellpadding = "0">
<tr>
<td now4>
<form id = "frmupload" target = "updoadwindow" enctype = "multipart/form-data" action = "" method = "post">
อัปโหลดไฟล์ใหม่: <br>
<อินพุต type = "file" name = "newfile"> <br>
<อินพุต type = "ปุ่ม" value = "ส่งไปยังเซิร์ฟเวอร์">
</form>
</td>
<td> & nbsp;
<td value = "top">
URL ไฟล์ที่อัปโหลด: <br>
<อินพุต id = "txturl" readonly type = "text">
</td>
</tr>
</table>
<br>
โพสต์ URL: <span id = "eurl"> & nbsp;
</td>
</tr>
<tr>
<td>
<ifme name = "UploadWindow"> </iframe>
</td>
</tr>
</table>
</body>
</html>
เนื้อหาของ upload.aspx:
<%@ page language = "c#" autoEventWireUp = "true" codeFile = "upload.aspx.cs" สืบทอด = "อัปโหลด"%>%>%>
ต่อไปนี้เป็นรหัสพื้นหลัง:
ใช้ระบบ
ใช้ System.data;
ใช้ System.Configuration;
ใช้ System.collections;
ใช้ system.io;
ใช้ System.Text;
ใช้ System.web;
ใช้ System.web.security;
ใช้ system.web.ui;
ใช้ System.web.ui.webcontrols;
การใช้ System.web.ui.webcontrols.webparts;
การใช้ System.web.ui.htmlcontrols;
ใช้ System.xml;
การใช้ System.collections.specialized;
การอัปโหลดคลาสสาธารณะบางส่วน: system.web.ui.page
-
โมฆะสาธารณะ sendresults (int errornumber, สตริง fileUrl, ชื่อไฟล์สตริง, สตริง custommsg)
-
StringBuilder text = new StringBuilder ();
text.append ("<script type =/" text/javascript/">">);
text.append ("window.parent.onuploadcompleted (" + errorrnumber + ",/" + fileurl.replace ("/", "//" "),/" + filename.replace ("/" ", // /"") + "/",/" + custommsg.replace ("/"", "//" "));/n");/n ");/n");/n "); n ");/n");/n ");/n");/n ");
text.append ("</script>");
Response.write (text.toString ());
Response.end ();
-
โมฆะสาธารณะ get getfig (ประเภทสตริง, out string [] allededext, out string [] denyedext, ออก maxsize ยาว), ออก maxsize ยาว)
-
XMLDOCUMET DOC = ใหม่ XMLDOCUMENT ();
doc.load (server.mappath (@"./ config.xml");
xmlement root = doc.documentelement;
xmlnodelist imageexodelist = root.getElementByTagname (ประเภท);
allowedext = imagenodelist [0] .firstchild.innertext.trim ()
denyedext = imagenodelist [0] .lastchild.innertext.trim ()
savepath = root.getElementByByTagname ("userPath")
พยายาม
-
maxsize = convert.toint64 (root.getElementByTagname ("maxsize"). รายการ (0) .innerText.trim ());););););););););););););););););););););););); ;);););););
-
จับ {maxSize = 10*1024;}
-
void page_load ที่ได้รับการป้องกัน (ผู้ส่งวัตถุ EventArgs E)
-
String [] allowedext = สตริงใหม่ [] {}, denyedext = สตริงใหม่ [] {};
สตริง savepath = string.empty;
ยาว maxsize = 10,000;
type string = request.QueryString ["type"];
if (type! = null && type! = string.empty)
type = type.tolower ();
อื่น
type = "ไฟล์";
if (type == "image")
-
getConfig ("รูปภาพ", ออกอนุญาตให้ออก, denyedext, out savepath, out maxsize);
-
if (type == "ไฟล์")
-
getConfig ("ไฟล์", outededext, out deenyedext, out savepath, out maxsize);
-
if (type == "flash"))
-
getConfig ("flash", outededext, out denyedext, out savepath, out maxsize);
-
ifpath == string.empty ||
savepath = "~/userfiles/";
if (! savepath.endswith ("/") savepath+= "/";
/*********************************************************** ** ***********************************************************
ไบต์ [] bytes1 = system.text.encoding.default.getBytes ("นี่คือสตริง/n/n/n/n");
Byte [] bytes2 = byte ใหม่ [] {1, 33, 23, 3, 0, 56, 55, 235, 5};
ไบต์ [] bytes = ไบต์ใหม่ [bytes1.length + bytes2.length];
// รวมกระแสไบนารี
MemoryStream MS = ใหม่ MemoryStream (ไบต์);
Ms.Write (bytes1, 0, bytes1.length);
Ms.Write (bytes2, 0, bytes2.length);
จำนวน int = 0, pos = 0;
// เริ่มค้นหาสี่ '/n'
สำหรับ (int i = 0; i <bytes.length; i ++)
-
if (bytes [i] == (int) '/n')
-
นับ ++;
ถ้า (นับ == 4)
-
pos- = 4;
หยุดพัก;
-
-
-
ถ้า (นับ == 4)
-
// ที่นี่ตำแหน่งจาก 0 ถึง POS ในอาร์เรย์ไบต์ไบต์คือสตริงที่คุณต้องการ
// ตั้งแต่ต้น POS + 5 ถึงจุดสิ้นสุดไบนารีที่คุณต้องการ
-
************************************************ ***************************************************************************
Byte [] Filedata, Formdata;
formData = request.binaryRead (request.contentLength);
string head = string.empty;
การเข้ารหัสการเข้ารหัส = encoding.UTF8;
ยาว pos = 0;
สำหรับ (long i = 0; i <formdata.longlength; i ++)
-
if (formData [i] == (byte) '/r' && formData [i + 1] == (byte) '/n' && formData [i + 2] == (ไบต์) '/r' && formData [i + 3] == (ไบต์) '/n')
-
pos = i;
หยุดพัก;
-
-
if (pos == 0) {response.end ();
head = encoding.getString (formData, 0, (int) pos);
filedata = ไบต์ใหม่ [formdata.longlength -pos -3];
array.copy (formdata, pos + 4, filedata, 0, formdata.longlength -pos -4);
/*********************************************************** ** ***************************************************** ***
// รูปแบบของแบบฟอร์มมาคือ:
// "------------------------- 7d5fa3820f84/r/ncontent-disposition: form-data; name =/" newfile/" ".
// ในภายหลังคือข้อมูลไฟล์
************************************************ ******************************************************** ***********
head = head.tolower ();
head = head.remove (0, head.indexof ("/r/n");
head = head.replace ("/" "," ");
สตริง postfileName = string.empty;
ชื่อไฟล์สตริง;
สตริง FileType, fileext;
postfilename = head.substring (0, head.indexof ("/r/n"); // content-disposition: form-data; name =/"newfile/"; 4 (10995) .jpg/"
fileType = head.Remove (0, postfilename.length + 3);
postfilename = postfilename.substring (postfilename.indexof ("filename =") + "filename =". ความยาว);
filename = path.getFilename (postfilename);
filext = filename.substring (fileName.AlastIndexof (".") + 1;
ifdata.longlength> maxsize {{
Sendresults (2, Resolveurl (SavePath + ชื่อไฟล์), ชื่อไฟล์, "ใหญ่เกินไป");
กลับ;
-
บูล isallow = false;
foreach (String ext ใน denyedext) {
if (ext == fileext) {
isallow = false;
Sendresults (202, ResolveUrl (SavePath + ชื่อไฟล์), ชื่อไฟล์, "Forbiden");
กลับ;
-
-
foreach (String ext ใน allowext) {{
if (ext == fileext) {isallow = true;
-
ถ้า (isallow)
-
String tmppath = server.mappath (savepath);
if (! directory.exists (tmppath)) {{
พยายาม
-
Directory.createdirectory (TMPPATH);
-
จับ {SendResults (200, ResolveUrl (SavePath + ชื่อไฟล์), ชื่อไฟล์, "ไม่มีสิทธิ์เขียน");}
-
//response.binaryWrite (Filedata);
fileStream saveFileStream = new FileStream (TMPPATH+ชื่อไฟล์, fileMode.OpenorCreate, fileAccess.ReadWrite);
สำหรับ (long i = 0; i <fledata.longlength; i ++)
-
savefilestream.writeByte (filedata [i]);
-
savefilestream.close ();
SENDRESULTS (0, ResolveURL (SAVEPATH + ชื่อไฟล์), FileNamame, "ไม่มีข้อผิดพลาด");
-
-
-
config.xml
<? XML เวอร์ชัน = "1.0" การเข้ารหัส = "UTF-8"
<อัปโหลด>
<Evabled> True </enabled>
<userPath> </userPath>
<maxsize> 500000 </axsize> <!-หน่วยคือไบต์->
<file>
<led> zip |
<Deny> PHP
</ไฟล์>
<mage>
<lows> jpg |
<ปฏิเสธ> </eny>
</image>
<flash>
<lowal> SWF |
<ปฏิเสธ> </eny>
</flash>
</อัปโหลด>