file mvc文件上传
这次做了一个文件导入功能,要做的工作只有3步。
第一步:将文件上传至服务器
第二步:读取服务器的文件
第三步:将读取的文件,放入一个DataTable中,然后返回给前台页面。
(1)html代码如下:
<form id="fileForm" action="../DispatchList/UpFile" method="post" enctype="multipart/form-data" >
<div id="fileDiv">
<input type="file" name="fileUpload" id="fileUpload" style="display:none" /> <!--上传-->
</div>
</form>
首先将html文件放入一个form,然后在页面插入一个上传控件,file。注意:一定要添加 enctype="multipart/form-data" 这个标签。因为添加了这个才可以上传,文件是以二进制流的方式传输,上传二进制数据。
(2)后台代码如下:
前台form中给了一个action="../DispatchList/UpFile" ,当我保存的时候,$('#fileForm').submit();时,自动跳到UpFile方法中。以下是vb.net代码。
''' <summary>
''' 上传文件
''' </summary>
<HttpPost()>
Public Function UpFile(ByVal fileUpload As Web.HttpPostedFileWrapper) As ActionResult
Try
Dim ext As String = IO.Path.GetExtension(fileUpload.FileName)
Dim ImportDataFilePath = Server.MapPath("../ImportDataFiles/")
Dim newFileName As String = ImportDataFilePath & Date.Now.ToString("yyyyMMddhhmmss") & ext
If IO.File.Exists(newFileName) Then
Return Content("服务器已存在相同名称的文件,请更改重命名文件!")
Else
fileUpload.SaveAs(newFileName)
End If
Dim dt As DataTable = ExcelToDataTable(newFileName)
Dim file As New FileInfo(newFileName)
If file.Exists Then
'删除单个文件
file.Delete()
End If
Return Content(CommonTools.ObjectToJson(JSSerializerObject.SerializerDataTable(dt)))
Catch ex As Exception
Return Content("错误信息:" & Environment.NewLine & If(ex.InnerException Is Nothing, ex.Message, ex.InnerException.Message))
End Try
End Function
'将数据返回一个DataTable
Public Shared Function ExcelToDataTable(strExcelFileName As String) As DataTable
Dim ConnStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strExcelFileName & ";" & "Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"
Dim Conn As New OleDbConnection(ConnStr)
Conn.Open()
Dim SQL As String = "select * from [sheet1$]"
Dim da As New OleDbDataAdapter(SQL, ConnStr)
Dim ds As New DataSet()
da.Fill(ds)
Dim dt As DataTable
dt = ds.Tables(0)
Conn.Close()
Return dt
End Function
(3)在做的过程中出现的问题
在做的过程中出现了一个问题,file控件的change事件,只触发一次。
$("#fileUpload").change(function () {
var ss = $('#fileUpload').val()
if (ss != "") {
$('#fileForm').submit();
showLoading("正在导入数据,请稍等...")
}
});
最终解决是,将file控件的值清空就可以了。如下所示:
function FileSuccess(data) { if (data.startsWith("错误信息")) { alert(data); } else { hideLoading(); var rowData = StringToJson(data); for (var i = 1; i < rowData.length; i++) { $("#ttbody").datagrid("appendRow", { DLID: $("#tt").datagrid("getSelected").DLID, iQuantity: rowData[i].F5, cInvCode: rowData[i].F1, cInvName: rowData[i].F2, cInvStd: rowData[i].F3, cMeasureUnit: rowData[i].F4, cLicPlateNum: rowData[i].F6, cRemark: rowData[i].F7 }); } ComputeSum(); $('#fileUpload').val("") } }
如果没有清空file控件的值,chang事件是不会触发的。
---------有哪里不对的地方,请各位批评指正。谢谢!---------

浙公网安备 33010602011771号