2009-03-10 6 views
0

웹 양식에 FileUpload 컨트롤 (FileUpload1)과 "Sumbit"단추, 레이블 및 UserID가 들어있는 숨겨진 필드가 있습니다. 버튼의 클릭 이벤트에 다음 코드가 있습니다.FileUpload - 실제 파일 업로드 확인

string path = Server.MapPath("~/userfiles/"); 

if (FileUpload.HasFile) 
{ 
    try 
    { 
     FileUpload1.SaveAs(path + UserID.Value + "/image.jpg"); 
    } 
    catch 
    { 
     Label1.Text = "* unable to upload file"; 
     Label1.Visible = true; 
    } 
} 

실제 파일을 업로드하면 효과적입니다. 그러나 존재하지 않는 파일 이름 (예 : "c : \ a.jpg", 내 컴퓨터에는 존재하지 않음)을 FileUpload의 텍스트 상자에 입력하고 Sumbit 단추를 클릭하면 HasFile은 여전히 ​​true를 반환합니다. 또한 SaveAs()는 예외를 throw하지 않으며 성공 또는 실패를 나타내는 값을 반환하지 않는 void 함수입니다. 파일이 실제로 업로드되었는지 어떻게 알 수 있습니까?

답변

7

존재하는지 확인하십시오.

if(File.Exists(myFile)){ 
    //it was uploaded. 
} 
2

SaveAs를 호출하기 전에 File.Exists를 사용하여 파일이 존재하는지 확인할 수 있습니다.

3

당신은

는 확실하지 이해가 .... FileUpload.PostedFile.ContentLength 속성

1

흠 확인할 수 있습니다. 첫째, 코드에서 FileUpload.HasFile은 컴파일되지 않습니다. FileUpload1.HasFile이어야합니다.

나는이 문제를 해결하고 코드를 실행하면 파일이 존재하지 않을 경우,이 라인은 false를 반환 ...

파일이 File.Exists에게 (경로)를 사용하여 업로드 한 후 존재하는 경우 당신은 확인할 수 있습니다; 파일 개체는 System.IO의 일부입니다.

1

이것은 실제 질문이 아니지만 사용자가 웹 서버의 가상 폴더에 파일을 업로드하도록하려는 경우 사용자 입력을 확인해야합니다. 최소한 파일의 내용 유형이 예상 한 것인지 또는 .NET Framework에서 사용할 수있는 클래스를 사용하여 이미지를 필터링 (크기 조정)해야하는지 확인해야합니다.

그렇게하지 않으면 사용자가 사이트를 통해 임의의 콘텐츠를 공유하거나 서버의 악성 파일 (예 : 특정 웹 브라우저에서 실행되는 스크립트가 포함 된 이미지)을 배치 할 수 있습니다.

추가 검증을 통해 콘텐츠를 실제로 전송했는지 확인할 수도 있습니다.

AND : 폼 필드의 입력을 연결하여 저장 경로를 만들 때 매우 심각한 취약점이 발생합니다 (나는 UserID.Value이 언급 한 POST 매개 변수라고 생각합니다). 이를 통해 사용자는 서버에 콘텐츠를 저장할 위치를 결정할 수 있으며, 더 나쁜 경우 기존 파일을 덮어 쓸 수 있습니다!

관련 문제