2013-04-08 2 views
2

불만 사항 양식을 개발 중입니다. 이 양식에서는 파일을 업로드 한 다음 업로드 된 파일을 삭제하는 기능을 만들어야합니다. 서버에 파일을 업로드 할 수는 있지만 파일을 삭제하기 위해 업로드 한 파일의 링크를 서버로 가져갈 수 없습니다. 도와주세요. 여기 내 코드 :파일 업로드 제어를 사용하여 파일 업로드 및 삭제 asp.net

public string FilePath; 
protected void btAdd_Click(object sender, EventArgs e) 
    {   
    if (AttachFile.HasFile) 
     { 
      try 
      { 
        string[] sizes = {"B", "KB", "MB", "GB"}; 
        double sizeinbytes = AttachFile.FileBytes.Length; 
        string filename = Path.GetFileNameWithoutExtension(AttachFile.FileName); 
        string fileextension = Path.GetExtension(AttachFile.FileName); 
        int order = 0; 
        while (sizeinbytes >= 1024 && order + 1 < sizes.Length) 
        { 
         order++; 
         sizeinbytes = sizeinbytes/1024; 
        } 
        string result = String.Format("{0:0.##} {1}", sizeinbytes, sizes[order]); 
        string encryptionFileName = EncrytionString(10);      
        FilePath = "Path" + encryptionFileName.Trim() + AttachFile.FileName.Trim(); 
        AttachFile.SaveAs(FilePath);      
      } 
      catch (Exception ex) 
      { 
       lbMessage.Visible = true; 
       lbMessage.Text = ex.Message; 
      } 
     } 
    } 

protected void btDelete_Click(object sender, EventArgs e) 
    { 
     try 
     { 
      File file = new FileInfo(FilePath); 
      if (file.Exists) 
      { 
       File.Delete(FilePath); 
      } 
     } 
     catch (FileNotFoundException fe) 
     { 
      lbMessage.Text = fe.Message; 
     } 
     catch (Exception ex) 
     { 
      lbMessage.Text = ex.Message; 
     } 
    } 
+1

문제가 발생할 때 좀 더 자세히 설명해 주시겠습니까? 'btDelete_Click' 메서드가 호출되면 작동하지 않는다고 가정합니다. 그러나 예외를 게시 할 수 있습니까? –

답변

0

이 방법으로 수행해야합니다.

if (imgUpload.HasFile) 
    { 
       String strFileName = imgUpload.PostedFile.FileName; 
       imgUpload.PostedFile.SaveAs(Server.MapPath("\\DesktopModules\\Indies\\FormPost\\img\\") + strFileName); 
       SqlCommand cmd01 = new SqlCommand("insert into img (FeaturedImg) Values (@img)", cn01); 
        cmd01.Parameters.AddWithValue("@img", ("\\DesktopModules\\Indies\\FormPost\\img\\") + strFileName); 
     } 

이 코드를 사용하면 사이트 루트 디렉토리의 특정 위치에 파일을 업로드 할 수 있습니다. 이고 경로는 데이터베이스에 문자열로 저장됩니다. 이므로 데이터베이스에 저장된 경로를 사용하여 파일에 액세스 할 수 있습니다. 당신은 아무것도 이해할 수 없다면. 또는 더 많은 것을 알고 싶다면 저에게 연락하거나 의견을 물을 수 있습니다.

+0

정말 고마워, 내 문제가 해결되었습니다 :) – Tung

+0

내 대답 유용했다면 응답으로 표시하십시오. –

1

asp.net의 각 요청은 페이지의 새로운 개체를 만듭니다.
한 요청 중에 변수를 설정하면 다음 요청에서 변수를 사용할 수 없습니다.

업로드 중에는 삭제 논리가 FilePath에 설정되어있는 것 같습니다. 페이지가이를 기억하도록하려면 ViewState에 보관하십시오. ViewState는 동일한 페이지에 대한 요청을 통해 유지되며 삭제 중에 변수 FilePath을 사용할 수 있습니다.

FilePath을 속성으로 만들고 ViewState에서 가져 오면 쉽게 구현할 수 있습니다.

public string FilePath 
{ 
    get 
    { 
    return (string) ViewState["FilePath"]; 
    } 
    set 
    { 
    ViewState["FilePath"] = value; 
    } 
} 
+1

nunespascal 데이터베이스의 placxe에서 viewstate를 사용하는 솔리드 솔루션일까요? –

+0

@NiNaDPaNDYA 사용자 입력이 완료 될 때까지 데이터베이스를 사용하고 싶지는 않습니다. 여기에 제공된 삭제 버튼은 최종적으로 모든 입력을 저장하기 전에 사용자가 입력 파일을 수정할 수 있도록하는 것으로 가정합니다. db에 대한 경로 저장은 응용 프로그램의 비즈니스 로직의 일부입니다. – nunespascal

+2

그런 다음 변수를 사용할 필요가 없으며 fileupload 컨트롤의 hasfile 속성을 false로 설정하면됩니다. 더 이상 로직이 필요 없습니다. –