문제

사용자가 문서를 업로드 한 다음 표시 할 문서를 선택할 수있는 작은 WPF 응용 프로그램을 구축했습니다.

다음은 파일 사본 코드입니다.

    
public static void MoveFile( string directory, string subdirectory)
{
    var open = new OpenFileDialog {Multiselect = false, Filter = "AllFiles|*.*"};
    var newLocation = CreateNewDirectory( directory, subdirectory, open.FileName);

    if ((bool) open.ShowDialog())
        CopyFile(open.FileName, newLocation);
    else
        "You must select a file to upload".Show();
}

private static void CopyFile( string oldPath, string newPath)
{
 if(!File.Exists(newPath))
  File.Copy(oldPath, newPath);
 else
  string.Format("The file {0} already exists in the current directory.", Path.GetFileName(newPath)).Show();
}
    

파일은 사고없이 복사됩니다. 그러나 사용자가 파일을 선택하려고 할 때 방금 표시되도록 복사 한 파일은 예외를 찾을 수 없습니다. 디버깅 후 동적 이미지에 대한 요소가 상대 경로 '파일 {selected file}'을 Application Directory 대신 위 코드에서 선택한 파일에서 방금 찾은 디렉토리로 분해하고 있음을 발견했습니다. 해야합니다.

이 문제는 새로 복사 된 파일이 선택된 경우에만 발생합니다. 응용 프로그램을 다시 시작하고 새 파일을 선택하면 정상적으로 작동합니다.

다음은 이미지 소스를 동적으로 설정하는 코드입니다.

    
//Cover = XAML Image
Cover.Source(string.Format(@"Files\{0}\{1}", item.ItemID, item.CoverImage), "carton.ico");

...

public static void Source( this Image image, string filePath, string alternateFilePath)
{
    try
 {image.Source = GetSource(filePath);}
    catch(Exception)
 {image.Source = GetSource(alternateFilePath);}
}

private static BitmapImage GetSource(string filePath)
{
    var source = new BitmapImage();
    source.BeginInit();
    source.UriSource  = new Uri( filePath, UriKind.Relative);
    //Without this option, the image never finishes loading if you change the source dynamically.
    source.CacheOption = BitmapCacheOption.OnLoad;
    source.EndInit();
    return source;
}
    

난 그만 둔다. 모든 생각은 감사 할 것입니다.

도움이 되었습니까?

해결책 2

내 OpenFiledialogue의 생성자에 옵션이 없다는 것이 밝혀졌습니다. 대화는 상대 경로가 잘못 해결되는 현재 디렉토리를 변경하는 것이 었습니다.

열린 파일을 다음으로 바꾸는 경우 :


var open = new OpenFileDialog{ Multiselect = true, Filter = "AllFiles|*.*", RestoreDirectory = true};

문제가 해결되었습니다.

다른 팁

직접적인 답이 없지만 사람들이 파일을 업로드 할 수 있도록주의를 기울여야합니다. 나는 그들이 실제 악용을 시뮬레이션하기 위해 좋은 해커와 나쁜 해커를 가진 세미나에있었습니다. 하나는 파일을 업로드 할 수 있도록했습니다. 그들은 악성 ASP.NET 파일을 업로드하고 이미지가 궁극적으로 사용자에게 제시되는 곳에서 새로운 파일을 직접 호출했으며 결국 시스템을 인수 할 수있었습니다. 어떤 유형의 파일이 허용되고 있는지 확인하고 웹 서버의 비 독점 디렉토리에 저장되었는지 확인할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top