카테고리 없음
PHP 코드분석. 이미지 업로딩
흑백 개발자
2025. 1. 15. 12:25
728x90
이게 서버개발자에게 받아온 코드거든? 여기서 어느부분이 내가한 것과 관련있는 부분이야? 근처부분 코드블럭도 알려주면서 설명해줘.
ChatGPT
주어진 서버 코드에서 당신의 플러터 앱과 관련이 있는 부분을 다음과 같이 설명하겠습니다. 주요 관련 부분은 이미지 업로드, 이미지 검색 요청 처리, 그리고 검색 결과 반환과 관련된 로직입니다.
1. 이미지 업로드 처리
관련된 부분은 handleFileUpload() 메서드입니다. 이 메서드는 사용자가 업로드한 이미지를 처리하고 검색 가능한 형식으로 변환합니다.
관련 코드 블럭
php
// 사용자가 업로드한 이미지를 처리하고 검색 결과를 반환하는 함수
private function handleFileUpload() {
// 클라이언트에서 업로드된 파일을 받음
$file = $_FILES["fileToUpload"];
// 업로드된 파일을 서버에 저장하고 처리된 결과를 반환
$result = $this->processUploadedFile($file);
// 사용자가 선택한 플랫폼에 따라 다른 로직 수행
if ($this->params['platform'] == 'taobao') {
// Taobao 플랫폼인 경우:
// 이미지 URL을 업로드하고 Taobao의 이미지 검색 API 호출
$uploadedImageUrl = $this->uploadImageToTaobao($result['imageUrl']);
$api_data = $this->performTaobaoImageSearch($uploadedImageUrl);
$iconImg = TB_IMG_URL."/icon/tao_icon.png"; // Taobao 아이콘 이미지 설정
} else {
// 1688 플랫폼인 경우:
// base64 형식의 이미지를 사용해 1688의 이미지 검색 API 호출
$api_data = $this->search1688Image($result['imageBase64']);
$iconImg = TB_IMG_URL."/icon/1688_icon.png"; // 1688 아이콘 이미지 설정
}
// 최종적으로 검색 결과 및 메타 데이터를 반환
return [
'api_data' => $api_data, // 검색 결과 데이터
'platform_icon' => "<img alt='{$this->params['platform']}' src='$iconImg'>", // 플랫폼 아이콘
'imageDataUri' => $result['imageDataUri'], // 데이터 URI 형식 이미지
'imageBase64' => $result['imageBase64'], // Base64 형식 이미지
'page_size' => $this->pageSize, // 페이지 크기
];
}
설명
- 이 함수는 사용자가 업로드한 이미지를 서버에서 처리하고 저장합니다.
- 이미지가 저장된 후 search1688Image() 또는 performTaobaoImageSearch()를 호출하여 이미지 기반 검색을 실행합니다.
- 결과 데이터를 JSON 형식으로 반환합니다.
2. 이미지 처리 및 저장
이미지 업로드 후 서버에서 처리하는 로직은 processUploadedFile() 메서드에 있습니다.
관련 코드 블럭
php
// 업로드된 이미지를 서버에 저장하고 크기를 조정한 후 결과 반환
private function processUploadedFile($file) {
// 고유 파일 이름 생성
$filename = TB_TIME_YHS.'.'.pathinfo($file['name'], PATHINFO_EXTENSION);
// 오늘 날짜 기반으로 디렉토리 경로 설정
$todayDir = $this->tempDir.TB_TIME_YMD.'/';
// 최종 파일 경로
$targetFile = $todayDir.$filename;
// 업로드된 파일을 지정된 경로에 저장
if (!move_uploaded_file($file["tmp_name"], $targetFile)) {
throw new Exception("Failed to upload file"); // 업로드 실패 시 예외 발생
}
// 저장된 파일의 크기를 조정
$resizedFile = $this->resizeImage($targetFile);
// 최종 처리 결과를 준비
$result = $this->prepareUploadResult($resizedFile);
// 원본 파일 및 크기 조정된 파일 삭제
@unlink($targetFile);
@unlink($resizedFile);
// 최종 결과 반환
return $result;
}
설명
- 업로드된 파일을 서버의 임시 디렉토리(TEMP_DIR)에 저장합니다.
- 저장된 이미지는 resizeImage()를 통해 크기 조정 및 최적화됩니다.
- 처리된 이미지 정보는 prepareUploadResult()를 통해 반환됩니다.
3. 이미지 검색 요청 처리
검색 요청을 처리하는 로직은 search1688Image()와 performImageSearch()에서 구현됩니다.
관련 코드 블럭
php
// 1688 플랫폼에서 이미지 검색 수행
private function search1688Image($base64Image) {
// 가격 범위를 설정
$priceRange = $this->getPriceRange();
// 이미지 검색 API 호출
return $this->performImageSearch(
$base64Image, // Base64 형식 이미지 데이터
$this->params['platform'], // 플랫폼 정보 (1688)
$this->params['page'], // 페이지 번호
$this->params['sort'], // 정렬 기준
$priceRange['min'], // 최소 가격
$priceRange['max'], // 최대 가격
$this->pageSize, // 페이지 크기
$this->params['filter'], // 필터 조건
);
}
// 이미지 검색 API 호출 및 결과 반환
private function performImageSearch($base64Image, $platform, $page, $sort, $price_min, $price_max, $page_size, $filter = '') {
try {
// API 요청 데이터 구성
$img_post_data = array(
'offerQueryParam' => json_encode([
'imageId' => $base64Image, // 검색에 사용할 이미지 데이터
'beginPage' => $page, // 페이지 번호
'pageSize' => $page_size, // 페이지 크기
'sort' => "{'$sort':'desc'}", // 정렬 기준
'priceStart' => $price_min, // 최소 가격
'priceEnd' => $price_max, // 최대 가격
'filter' => $filter, // 추가 필터 조건
], JSON_UNESCAPED_UNICODE),
'access_token' => API_TOKEN_ALIBABA, // API 인증 토큰
);
// API 호출
$result = Fn_SendAPI_Post_Alibaba(API_ALIBABA_BASE_URL, $img_post_data);
// API 호출 결과 반환
return $result;
} catch (Exception $e) {
// 에러 발생 시 에러 메시지 반환
return ['error' => $e->getMessage()];
}
}
설명
- search1688Image()는 이미지를 기반으로 Alibaba 플랫폼에서 관련 상품을 검색하는 역할을 합니다.
- 검색 결과는 JSON 형식으로 반환되며, 클라이언트(플러터 앱)로 전달됩니다.
결론
당신의 플러터 앱에서 서버로 이미지를 업로드하는 작업과 관련된 코드는 다음과 연결됩니다:
- 이미지 업로드: handleFileUpload() 및 processUploadedFile()
- 이미지 처리 및 저장: resizeImage()
- 이미지 기반 검색: search1688Image() 및 performImageSearch()
이 코드를 통해 서버가 이미지를 어떻게 처리하고 검색 결과를 반환하는지 이해할 수 있습니다. 추가로 궁금한 점이나 더 깊이 알고 싶은 부분이 있으면 말씀해주세요!
728x90