문제

사용자가 제출하는 파일을 호스팅할 예정입니다.파일에서 일부 데이터를 가져온 다음 일부 디렉토리로 이동해야 합니다.

이 파일의 수명 동안 두 가지 관심 사항이 있습니다.첫 번째는 데이터가 추상화되는 경우이고, 두 번째는 파일을 공유할 수 있도록 보관하는 경우입니다.

데이터가 추상화될 때 파일 이름을 고유한 이름으로 바꾸거나 파일 이름에 고유한 문자열을 추가하여 다른 기존 파일을 덮어쓰지 않도록 하는 것이 좋다고 생각했습니다.

파일을 보관할 때 세 가지 전략을 생각해 보았습니다.하나는 특정 데이터에서 업로드된 모든 파일을 하나의 폴더에 보관하는 것입니다.(2006/9/04, 2008/jan/05) 다른 하나는 폴더를 유지하고 폴더에 보관하려는 최대 파일 수까지 계속 채우고 다른 폴더를 만드는 것입니다(/folder001/, /folder002/, /folder003/, 등..).또 다른 방법은 특정 임계값에 도달하면 하위 폴더를 만드는 것입니다.그래서 (/j/jd/jde/jdelator)와 같이 유닉스에서 이것을 어떻게 설명해야 할지 모르겠습니다.

제가 가지고 있는 질문은 여러분이 어떤 종류의 전략을 유용하다고 생각하거나 사용했는가 하는 것입니다.

도움이 되었습니까?

해결책

데이터가 추상화될 때 다음과 같은 것을 선택합니다. filename + millisec();두 번의 millisec 호출이 동일할 가능성은 없으며, 액세스할 때 파일 이름이 더 사용자 친화적입니다.

오래되고 사용하지 않는 파일을 제거하기로 결정한 경우 날짜 전략이 편리할 수 있습니다.2006 폴더를 가져와서 로그에 따르면 지난 해에 액세스하지 않은 모든 항목을 제거하기만 하면 됩니다.이는 또한 해당 파일이 최신 파일인지 아닌지를 알 수 있으므로 사용자에게 좋은 표시가 될 수 있습니다.폴더XYZ는 이 버전의 변형일 뿐이며 날짜를 각 N개 파일의 태그로 대체합니다.

임계값 하위 폴더를 사용하면 디렉터리 항목 수를 낮게 유지하여 액세스 속도를 높일 수 있습니다.이 솔루션에서는 특정 디렉터리가 커질 때 때때로 파일을 이동해야 하고 매핑되지 않은 경우 일부 URL을 끊어야 한다는 점에 유의하세요.

또 다른 가능성은 파일 이름 위치에 해당하는 UID를 가진 DB를 사용하고 다음을 통해 파일에 액세스하는 것입니다. http://server.com/UID/filename.txt .이렇게 하면 사용자는 파일을 자신에게 편리한 "filename.txt"로 저장하고 URL을 통해 파일을 찾을 수 있는 위치를 알 수 있습니다(DB를 사용하여 UID를 위치로 변환).UID는 동일한 파일의 중복을 처리하기 위한 체크섬(MD5, SHA-1)일 수 있습니다.

다른 팁

데이터베이스에서 guid로 투표한 다음 필요한 경우 Content-Disposition 헤더를 사용하여 원래 파일 이름으로 다시 이름을 지정합니다.제가 옹호하고 싶은 한 가지는 사용하는 폴더가 웹 루트 외부에 저장된다는 것입니다.사용자가 응용 프로그램 폴더에 파일을 업로드하는 것을 원하지 않습니다.

나는 파일 이름인 uuid에 ID(int)를 태그하는 관계형 데이터베이스를 사용했습니다.이렇게 하면 디스크에 어떻게 저장되어 있는지는 중요하지 않습니다.파일을 난독화하는 데 도움이 됩니다.또한 JOIN을 사용하여 파일 이름을 임의로 변경할 수 있습니다.또한 다른 파일 "이름"을 사용할 수 있습니다. 그것은 모두 앱과 실행중인 위치에 따라 다릅니다.

귀하의 애플리케이션 등에 따라 다르지만 지금은 파일 저장소 체계를 매우 단순하게 유지하고 나중에 보다 정교한 전략을 결정하는 것이 좋습니다.즉, 잠시 동안 일종의 "관리된 혼돈"을 만드는 것입니다.구조와 전략은 나중에 모든 요구 사항과 도메인 세부 사항을 알게 될 때 나올 것입니다.단순함을 유지하면 모든 것을 쉽게 변경할 수 있습니다.

어차피 변화는 불가피해 지금 할 수 있는 최선은 선택하는 것 어떤 전략 그리고 모든 것을 문서화합니다.

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