方法一、通過Ajax方式上傳文件(input file),使用FormData進行Ajax請求
<
div
>
<
input
type="file" name="FileUpload" id="FileUpload">
<
a
class="layui-btn layui-btn-mini" id="btn_uploadimg">上傳圖片</
a
>
</
div
>
<script type=
"text/jscript"
>
$(
function
() {
$(
"#btn_uploadimg"
).click(
function
() {
var
fileObj = document.getElementById(
"FileUpload"
).files[0];
// js 獲取文件對象,(據說IE8 不支持.files寫法,未測試)
if
(
typeof
(fileObj) ==
"undefined"
|| fileObj.size <= 0) {
alert(
"請選擇圖片"
);
return
;
}
var
formFile =
new
FormData();
formFile.append(
"action"
,
"UploadVMKImagePath"
);
formFile.append(
"file"
, fileObj);
//加入文件對象
//第一種 XMLHttpRequest 對象
//var xhr = new XMLHttpRequest();
//xhr.open("post", "/Admin/Ajax/VMKHandler.ashx", true);
//xhr.onload = function () {
// alert("上傳完成!");
//};
//xhr.send(formFile);
//第二種 ajax 提交
var
data = formFile;
$.ajax({
url:
"/Admin/Ajax/VMKHandler.ashx"
,
data: data,
type:
"Post"
,
dataType:
"json"
,
cache:
false
,
//上傳文件無需緩存
processData:
false
,
//用於對data參數進行序列化處理 這里必須false
contentType:
false
,
//必須
success:
function
(result) {
alert(
"上傳完成!"
);
},
})
})
})
</script>
<form id="fmFileUpload_Knowledge" method="post" enctype="multipart/form-data">
//必須要有name屬性,name屬性是用於在前台和后台間建立聯系的,form中只有具有name屬性的控件,其值才會被傳遞到后台,而沒有name屬性的控件后台程序是接收不到它的值的
<input id="UploadFile" type="file" name="name1" /></div>
</form>
<script type=
"text/jscript"
>
$(
function
() {
$(
"#btn_uploadimg"
).click(
function
() {
var options = {
type: 'post',
data: { Default: "FileUpload",},
url: 'Index.aspx',
success: function (data) {
//兼容IE和FireFox
var file = $("#UploadFile");
file.after(file.clone().val(""));
file.remove();
}
};
$('#fmFileUpload_Knowledge').ajaxSubmit(options);
})
})
</script>
private string FileUpload()
{
string fileName = string.Empty;
string serverPath = string.Empty;
try
{
HttpFileCollection httpFileCollection = Request.Files;
if (httpFileCollection.Count > 0) //如果沒有name屬性,獲取不到file
{
HttpPostedFile file = httpFileCollection[0];
fileName = Path.GetFileName(file.FileName);
if (File.Exists(serverPath))
{
rdsl.returnMessage = "該文件已存在,請更改文件名或者刪除原文件,然后上傳.";
return GetJSON.JSONSerialize(rdsl);
}
Thread thread = new Thread(new ThreadStart(() =>
{
file.SaveAs(serverPath);
}
));
thread.Start();
}
else
{
rdsl.returnCode = iCode.ToString();
rdsl.returnMessage = "未獲取到文件.";
}
return GetJSON.JSONSerialize(rdsl);
}
catch (Exception ex)
{
log.Error(ex.Message);
log.Error(ex.StackTrace);
}
}
/// <summary>
/// 下載文件方法
/// </summary>
/// <param name="serverPath">被下載的文件地址(服務器地址包括文件)</param>
/// <param name="filePath">另存放的路徑(本地需要存儲文件的文件夾地址)</param>
public void Download(string serverPath, string filePath)
{
WebClient client = new WebClient();
string fileName = serverPath.Substring(serverPath.LastIndexOf("/") + 1); ;//被下載的文件名
string path = filePath + fileName;//另存為地址
try
{
WebRequest myre = WebRequest.Create(serverPath);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
try
{
client.DownloadFile(serverPath, fileName);
FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs);
byte[] mbyte = r.ReadBytes((int)fs.Length);
FileStream fstr = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
fstr.Write(mbyte, 0, (int)fs.Length);
fstr.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}