如果前端改成 jQuery AJAX,後端是一般 aspx 網頁沒有 HttpPostedFileBase 接收時,那該怎麼做呢? 或許這種傳統的方法已經很少人會去使用,很不幸的我就遇到了... 所以特別備忘下來。
前端:
<script type="text/javascript">
function UploadFile() {
// FormData 物件
var formData = new FormData();
// HTML File
var fileInput = document.getElementById("fileInput");
// 如果File支援檔案多選,就用迴圈來找出所有檔案
for (var i = 0; i < fileInput.files.length; i++) {
formData.append(fileInput.files[i].name, fileInput.files[i]);
}
// 其他要POST的欄位,例如HTML Text
formData.append('username', $("#txtUsername").val());
$.ajax({
url: 'Upload.aspx',
type: 'POST',
data: formData, // 將整個FormData POST到後端
processData: false, // 禁止將data自動轉換成query string
contentType: false, //取消預設值'application/x-www-form-urlencoded; charset=UTF-8'
success: function (data) {
alert(data);
}
});
}
</script>
<input type="text" id="txtUsername" /> <input type="file" id="fileInput" multiple="multiple" /> <input type="button" onclick="UploadFile()" value="UploadFile" />
後端:
// 一般欄位的接收方法使用Request.Form
string Username = Request.Form["username"];
// 迴圈找出所有File,注意是用Request.Files,而不是Request.Form
for (int i = 0; i < Request.Files.Count; i++)
{
HttpPostedFile file = Request.Files[i];
int fileSize = file.ContentLength;
string fileName = file.FileName;
System.IO.Stream fileContent = file.InputStream;
// 將檔案儲存起來
try
{
file.SaveAs(Server.MapPath("~/UploadFiles/") + fileName);
}
catch (Exception ex)
{
Response.Write(ex.Message);
}
}
參考來源:stackOverflow
沒有留言:
張貼留言