사이트에 사진을 업로드하고 저장하는 가장 좋은 방법은 무엇입니까?
큰 웹 사이트가 서버에 사진을 저장하는 방법을 모르겠습니다. 누구든지 사용자가 업로드 한 사진을 데이터베이스에 저장하는 방법을 알려줄 수 있습니까?
나는 그들이 어떤 경로에 파일 (그림)을 저장하고 그 경로를 databse에 저장하는 것이 맞습니까?
하지만 저는 이렇게하고 싶습니다. 이게 옳은 거니? 예를 들어 www.photos.com
. 사용자가 사진을 업로드하면 사용자 이름의 폴더를 만들고 해당 폴더에 사진을 저장합니다.
나는 우리가 php file concepts
. 그래서 새로운 사용자가 자신의 사진이나 파일을 업로드 할 때 그의 이름으로 디렉토리를 만들고 싶습니다.
예 : 사용자 이름이 john이면 photos.com에 이와 같은 디렉토리를 만든 www.photos.com/john/
다음 사진을 업로드 할 때 그의 모든 사진을이 디렉토리에 저장합니다. 이것이 올바른 방법입니까?
여기에 파일을 서버에 저장하는 방법을 잘 아는 사람이 없습니다. 어떻게해야하는지 알려주세요. 정확하고 안전한 방법으로하고 싶습니다.
모든 대형 웹 사이트 는 사진을 디스크에 저장 하는 데이터베이스에 저장하지 않습니다 . 테이블에서 그림의 위치에 대한 참조를 저장합니다. 그리고 거기에서 링크합니다.
왜? 공연.
데이터베이스에서 대용량 콘텐츠를 가져 오는 것은 엄청난 성능 병목 현상입니다. 그리고 데이터베이스는 수평 적으로 잘 확장되지 않으므로 더 큰 문제를 의미합니다. 모든 대형 사이트는 정적 콘텐츠 팜을 사용하여 이미지와 같은 정적 콘텐츠를 처리합니다. 그것은 당신의 신원에 대해 덜 신경 쓰지 않는 서버입니다.
그들은 당신이 물을지도 모르는 사진을 어떻게 정말로 비공개로 유지합니까? 그렇지 않습니다.
사진의 링크는 그 자체로 주소와 암호입니다. 예를 들어 페이스 북을 보자. 내 계정에 비공개 사진을 저장하면 열 수 없습니다. 하지만 정확한 주소 만 있으면 가능합니다.
이 사진은 비공개 입니다. 파일 이름을 확인합니다
10400121_87110566301_7482172_n.jpg
(페이스 북은 URL을 수시로 변경하므로 링크가 깨질 수 있습니다)
비 순차적입니다. 사진을 얻는 유일한 방법은 주소를 아는 것입니다.
이전 사용자 사진을 기반으로 다음 사진을 추측 할 수 없습니다.
그것은 거대한 엔트로피를 가지고 있기 때문에 무작위로 추측하기 시작하더라도 엄청난 양의 실패를 겪을 것이고, 사진을 찍으면 거기에서 소유자의 신원을 깨닫지 못할 것입니다. 그 자체로 익명 성의 보호입니다.
편집 ( "사용자 이름"폴더에 이미지를 저장하지 않아야하는 이유 :
편집 후 파일을 데이터베이스가 아닌 디스크에 저장하려는 의도가 분명해졌습니다.이 편집은 새로운 시나리오를 다룹니다.
논리 (사용자 당 폴더 만들기) 이음새가 더 잘 구성되어 있더라도 많은 사용자와 많은 사진을 갖기 시작하면 문제가 발생합니다. 서버에 1T 디스크 공간이 있다고 상상해보십시오. 또한 1T가 서버가 처리 할 수있는 부하에 대해 다소 정확하다고 상상해보십시오.
이제 11 명의 사용자가 있으며 동시에 업로드를 시작하고 각 사용자가 100GB 이상의 파일을 업로드한다고 가정합니다. 91GB에 도달하면 각 서버가 가득 차서 다른 서버에 이미지 저장을 시작해야합니다. 해당 사용자 / 폴더 구조를 따르는 경우 사용자 중 한 명을 선택하고 모든 데이터를 다른 서버로 마이그레이션해야합니다. 또한 1T 이상의 파일을 업로드 할 수없는 사용자에게 엄격한 제한을가합니다.
그러면 모든 파일을 같은 폴더에 저장해야합니까?
아니요, 큰 사이트는 일반적으로 폴더 당 x 개의 정의 된 파일 수를 갖는 순차적 폴더 (/ 000001 /, / 000002 / 등)에 파일을 저장합니다. 이것은 주로 파일 시스템 성능 문제를위한 것입니다.
디렉토리에있는 파일이 너무 많은지 에 대해 자세히 알아보십시오.
일반적으로 데이터베이스에 이미지를 저장하는 것은 좋지 않습니다 (사이트가 인기있는 경우). 데이터베이스는 전통적으로 대부분의 모든 애플리케이션에서 주요 병목 현상 중 하나입니다. 필요 이상으로로드 할 필요가 없습니다. 이미지가 파일 시스템에 있으면 많은 http 서버 ( 예 : nginx )가 이미지를 가장 효율적으로 제공합니다.
러시아에서 가장 큰 소셜 네트워크 인 Vkontakte 는 정확히이 작업을 수행합니다. 이미지를 파일 시스템에 저장합니다.
또 다른 대형 소셜 네트워크는 정교하고 확장 가능한 Blob 저장소를 구현했습니다. 그러나 AFAIK는 대중에게 공개되지 않습니다.
이 답변의 요약 : 데이터베이스에 Blob을 저장하지 마십시오.
이미지 관리는 물리적으로 이미지를 서버에 업로드 한 다음 파일 위치와 이미지 세부 정보를 데이터베이스에 기록하는 방법으로 가장 잘 수행 할 수 있습니다. 그 후 사용자가 텍스트 검색, 부품 번호 검색 또는 기타 쿼리를 수행 할 수 있도록 검색 양식을 구성 할 수 있습니다. 테이블에있는 데이터를 기반으로 유효한 HTML 이미지 태그를 생성하도록 PHP 스크립트를 작성할 수 있습니다.
MySQL ™ BLOB 필드에 이미지를 업로드하는 것은 이미지가 썸네일보다 훨씬 큰 경우 일반적으로 이러한 이미지 데이터가 문제가되는 나쁜 생각입니다. 이미지가 크면 한 번에 하나의 SQL INSERT 문을 phpMyAdmin에 복사 / 붙여 넣기해야 할 수 있습니다. 이미지가 크고 SQL INSERT 문이 텍스트 편집기에 의해 두 줄로 나뉘어 진 경우 이미지를 복원 할 수 없습니다.
이것이 올바른 방법입니까?
예.
이름이 아니라 이드를 사용하라고 제안하는 유일한 것.
www.photos.com/albums/1234/
우선 괜찮을 것입니다.
'programing' 카테고리의 다른 글
전체 파일을 메모리로 읽지 않고 파일의 줄 수를 계산합니까? (0) | 2021.01.16 |
---|---|
Android에서보기를 비트 맵으로 변환 (0) | 2021.01.16 |
openssl을 요구하거나 OpenSSL을 설치하고 ruby (권장)를 다시 빌드하거나 HTTPS가 아닌 소스를 사용할 수 없습니다. (0) | 2021.01.16 |
F #에서 파일을 일련의 줄로 읽는 방법 (0) | 2021.01.16 |
PHP에서 날짜별로 파일 정렬 (0) | 2021.01.16 |