通过一般处理程序实现【文件上传】
注意事項:
1>表單的提交方式必須為post,method="post";//由于http上面的數據大小有限,所以不支持使用get顯示到上面。
2>必須修改表中提交數據時的數據組織方式
enctype="application/x-www-form-urlencoded"//默認方式 數據是以鍵值對的方式組織提交的
enctype="multipart/form-data"//需要改為這種方式 這種方式是以為分隔符的方式來進行提交的。
3>表單中需要有一個文件域。及<input type="file" name="fileData"/>
--->
客戶端-html文件代碼:
<form action="Uploadashx.ashx" method="post" enctype="multipart/form-data">
<input type="file" name="fileData" /><br />
<input type="submit" value="提交"/>
</form>
服務器--一般處理程序代碼:
//服務器處理上傳過來的文件
//首先判斷文件域是否有文件
if (context.Request.Files.Count > 0)
{
//獲得第一個文件
HttpPostedFile file = context.Request.Files[0];
//判斷里面的內容是否為null
if (file.ContentLength > 0)
{
//將上傳過來的內容保存到一個文件夾
string str1 = Path.GetFileName(file.FileName);
file.SaveAs(context.Request.MapPath("Files/"+str1));
//根據相對路徑獲取絕對路徑,并追加文件名開始保存
}
}
<<--
上傳文件需要注意的問題:
1.【解決文件重名問題
可以通過Guid生成一個序列號(沒重復的),然后+文件名拼接成一個新的文件名,然后保存,這樣就可以避免重名發生覆蓋現象。
string new_FIleName = Guid.NewGuid().ToString() + "_" + file.FileName;
2.【解決文件過多存儲問題
可以通過目錄分離算法來保證將不同的圖片保存在不同的目錄下。
--------------------------------------------------------<<
string new_FIleName = Guid.NewGuid().ToString() + "_" + file.FileName;
//獲得哈希碼
int hash_Code = new_FIleName.GetHashCode();
//獲得第一層目錄
int dir1 = hash_Code & 0xf;
hash_Code = hash_Code >> 4;//向右移動四位得到第二層目錄
int dir2 = hash_Code & 0xf;
hash_Code = hash_Code >> 4;//再向右移動四位得到第三層目錄
int dir3 = hash_Code & 0xf;
//拼接路徑
string strPath = Path.Combine(context.Request.MapPath("filePath/"),dir1.ToString(),dir2.ToString(),dir3.ToString());
//判斷路徑是否存在
if (!Directory.Exists(strPath))
{
//如果不存在則創建文件
Directory.CreateDirectory(strPath);
}
//拼接路徑+文件名
strPath = Path.Combine(strPath, new_FIleName);
//開始保存
file.SaveAs(strPath);
context.Response.Write("上傳成功~");
3.【不允許用戶上傳exe文件,所以要先判斷用戶上傳的內容是否合法
-->>在服務器進行校驗
string ext=Path.GetExtension(file.FileName);//首先獲得擴展名 if((ext==".jpg"||ext==".png"||ext==".gif")&&file.ContentType.ToLower().StartsWith("image"))
{
context.Response.Write("文件上傳成功~");
}else{
context.Response.Write("非法的文件!");
}
-->>在客戶端用js進行校驗
//在客戶端校驗用戶上傳的文件是否合法
document.getElementById("btnClick").onclick = function () {
//1.獲取用戶選擇文件的名稱
var getFile = document.getElementById("fileData").value();
//2.獲取后綴
var ext = getFile.substring(getFile.lastIndexOf('.'));
//3.校驗
if(ext==".jpg"||ext==".png"||ext==".gif")&&file.ContentType.ToLower().StartsWith("image"))
{
return true;
}else{
return false;
}
};
轉載于:https://www.cnblogs.com/shuai7boy/p/5536840.html
總結
以上是生活随笔為你收集整理的通过一般处理程序实现【文件上传】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iPhone怎样开启勿扰模式
- 下一篇: 转:ORACLE的JDBC连接方式:OC