얼마전 직장에서 사용했는데 업로드 관련 코드만 보관해 두었는데 실제로는 아주 작은 코드였습니다.
업로드 페이지 html/js
< ;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> html xmlns= "http://www.w3.org/1999/xhtml" >
javascript"> ;
function FinishUpload(filePath) {
document.getElementById("uploadForm").reset();
if (!filePath) {
alert("가져오기 실패!");
}
else {
alert("decodeURIComponent(filePath) "로 가져왔습니다!");
}
}
function UploadFile() {
var arr = document.getElementById ("txtFile").value.split('.');
var fileType = arr[arr.length - 1]
if (fileType.toLowerCase().indexOf("csv") < 0 ) {
document.getElementById("uploadForm").reset();
alert("csv 파일을 선택하세요.")
return false; .getElementById( "uploadForm").encoding = "multipart/form-data";
document.getElementById("uploadForm").submit()
}
function ResetFile(file) {
var tmpForm = document.createElement('form');
file.parentNode.insertBefore(tmpForm, file);
tmpForm.appendChild(file);
tmpForm. RemoveNode(false );
{
HttpPostedFile file = context.Request.Files[0]
if (file.ContentLength > 0)
{
}
else
{
context.Response.Write(" <script>window.parent.FinishUpload('');</script>");
}
새로 고침을 수행하지 않는 기본 원칙은 양식을 iframe에 제출하는 것입니다. , 새로 고침이 iframe에서 발생하도록 합니다. 양식은 업로드된 파일 처리를 가리키도록 작업을 설정하고 대상을 iframe으로 설정합니다. 업로드 작업의 결과는 iframe으로 반환될 수 있으며, 업로드 성공 여부를 표시하기 위해 상위 개체의 FinishUpload 메서드가 호출됩니다. 따라서 AJAX가 대중적이지 않았을 때에는 새로 고침되지 않은 효과를 위장하기 위해 이 방법이 자주 사용되었으며 지금도 여전히 사용할 수 있습니다.
다음 사항에 유의하세요.
enctype="multipart/form-data"는 필수입니다. enctype의 기본 인코딩은 "application/x-www-form-urlencoded"입니다. enctype="multipart/form-을 설정하세요. 데이터", 바이너리 모드로 파일을 업로드하는 데 사용됩니다.
파일 이름이 깨지거나 문자가 깨져서 URL 전송 시 문제가 발생하는 것을 방지하려면 프런트 데스크에 파일 이름을 반환할 때 HttpUtility.UrlEncode를 수행하고, 프런트 데스크 JS에서 파일 이름을 가져올 때 decodeURIComponent를 수행합니다.
파일 선택 상자 재설정 시 파일 선택 상자를 임시 양식에 임시 삽입한 후 양식의 재설정 방법을 통해 재설정해야 합니다.
그런데 업로드된 csv 파일을 파싱하는 코드를 붙여넣으세요
csv 파일을 파싱하세요
코드를 복사하세요
코드는 다음과 같습니다.
private DataTable ImportDataTable(string filepath)
{
DataTable mydt = new DataTable("myTableName");
mydt.Columns.Add("데이터 ID", System.Type.GetType("System.String"));
mydt.Columns.Add("필드 이름", System.Type.GetType("System.String"));
mydt.Columns.Add("새 값", System.Type.GetType("System.String"));
DataRow mydr;
(System.IO.StreamReader mysr = new System.IO.StreamReader(filepath)) 사용
{
int data;
문자 전류;
StringBuilder 텍스트 = new StringBuilder();
IDictionary> 결과 = 새로운 Dictionary>();
bool isInYinHao = false; ;
int lineId = 1;
int 인덱스 = 0;
while(true)
{
data = mysr.Read();
if (data != -1)
{
current = (char)data;
if (현재 == '"')
{
if (isInYinHao)
{
isInYinHao = false;
}
else
{
if (색인 > 0)
{
text.Append(현재)
}
isInYinHao = true
}
}
else if (current == ', ')
{
if (isInYinHao)
{
text.Append(현재)
}
else
{
SaveResult(results, lineId, text) ;
index = 0;
continue;
}
}
else if (current == 'r')
{
if (isInYinHao)
🎜>text.Append(current)
}
}
else if (current == 'n')
{
if (isInYinHao)
{
text. 추가(현재);
else
{
SaveResult(결과, lineId, text)
index = 0;
}
else if (현재 == ' ')
{
}
else
{
text.Append(현재)
}
index; ;
}
else
{
//파일 끝까지 읽습니다.
SaveResult(results, lineId, text)
break; >foreach (results.Keys의 int id)
{
mydr = mydt.NewRow()
for (int i = 0; i < results[id].Count; i )
{
if (i > 2)
{
break
}
mydr[i] = 결과[id][i];
}
mydt.Rows.Add(mydr);
}
}
return mydt;
}
private void SaveResult(IDictionary> results, int lineId, StringBuilder text)
{
if (!results.ContainsKey(lineId))
{
results.Add(lineId, new List());
}
results[lineId].Add(text.ToString());
text.Remove(0, text.Length);
}
点击下载