자바 구현 사진 FastDFS 입문 강좌 에 업로드
나머지 하 나 는 패스 트 DFS 입 니 다.그렇다면 패스 트 DFS 는 무엇 일 까요?
FastDFS오픈 소스 의 경량급 분포 식 파일 시스템 으로 추적 서버(tracker server),저장 서버(storage server)와 클 라 이언 트(client)세 부분 으로 구성 되 어 있 으 며 주로 대량의 데이터 저장 문 제 를 해결 하 였 으 며 특히 중 소 파일(권장 범위:4KB
여 기 는 FastdFS 의 장점 만 말 합 니 다.
대 용량 저장 과 부하 균형 문 제 를 해결 했다.앨범 사이트,동 영상 사이트 등 파일 을 매개체 로 하 는 온라인 서비스 에 특히 적합 하 다.
FastDFS 서버 에는 추적 기(tracker)와 저장 노드(storage)두 가지 역할 이 있 습 니 다.추적 기 는 주로 스케줄 링 작업 을 하여 방문 에 있어 서 부하 균형 을 이 루 는 역할 을 한다.
더 자세 한 내용 은 참고 할 수 있 습 니 다.http://blog.chinaunix.net/uid-20196318-id-4058561.html
개발 실례
0,FastDFS 사용:
우선 Linux 에 FastDFS 를 설치 하고 설정 해 야 합 니 다.여 기 는 더 이상 군말 하지 않 습 니 다.
먼저 도입 한 FastdFS jar 가방 을 살 펴 보 겠 습 니 다.
fdfs 보기client.conf 설정 파일:
우 리 는 이 안의 설정 이 우리 가 원 하 는 것 이 아니 라 는 것 을 발견 했다.그러면 어떻게 해 야 합 니까?우 리 는 자신의 프로젝트 에 한 부 를 덮어 써 야 한다.
프로필 내용 은 다음 과 같 습 니 다:(여기 tracker 설정 이 필요 합 니 다.server)
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# the base path to store log files
base_path=/home/fastdfs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
tracker_server=192.168.200.128:22122
#tracker_server=192.168.101.4:22122
#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info
# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false
# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600
# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false
# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false
# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf
#HTTP settings
http.tracker_server_port=80
#use "#include" directive to include HTTP other settiongs
##include http.conf
1,jsp 에 input 탭 을 추가 하여 그림 업로드여기에 숨겨 진 필드 는 imgUrl 입 니 다.업로드 에 성공 한 후 돌아 오 는 그림 주 소 를 저장 합 니 다.submit 전체 폼 을 저장 할 때 이 url 주 소 를 데이터베이스 에 저장 하고 list.jsp 에서 이 url 을 직접 가 져 오 면 그림 데 이 터 를 표시 할 수 있 습 니 다.
2,업로드 js 코드 추가:
ajax Submit 방법 을 사 용 했 습 니 다.사진 을 올 릴 때 실제로 폼 을 제출 한 다음 UploadPicController 의 uploadPic 방법 으로 보 내 는 요청 을 처리 합 니 다.
3,uploadPicController.cs 를 구축 하여 uploadPic.do 요청 을 분석 합 니 다.
컨트롤 러 층:
UploadController.java:
*
*/
@Controller
@RequestMapping(value="/upload")
public class UploadController {
@Autowired
private UploadService uploadService;
//
@RequestMapping(value="/uploadPic.do")
public void uploadPic(@RequestParam(required=false) MultipartFile pic, HttpServletResponse response) throws Exception{
//Java FastDFS
String path = uploadService.uploadPic(pic.getBytes(), pic.getOriginalFilename(), pic.getSize());
//path:group1/M00/00/01/wKjIgFWOYc6APpjAAAD-qk29i78248.jpg
//url:http://192.168.200.128 (Linux ip )
String url = Constants.img_url + path;
//Json
JSONObject jo = new JSONObject();
jo.put("url", url);
jo.put("path", path);
// json
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(jo.toString());
}
}
json 형식 을 통 해 url 을 전단 으로 쓰 면 ajax 요청 에서 인 자 를 받 고 그림 을 표시 할 수 있 습 니 다.서비스 계층:
UploadServiceImpl.java:
/*
*
*/
@Service("uploadService")
public class UploadServiceImpl implements UploadService {
//
public String uploadPic(byte[] pic, String name, long size){
return FastDFSUtils.uploadPic(pic, name, size);
}
}
Common 도구 종류:FastDFSUtils.cs
/*
* FastDFS
*/
public class FastDFSUtils {
public static String uploadPic(byte[] pic, String name, long size){
String path = null;
//ClassPath Spring
ClassPathResource resource = new ClassPathResource("fdfs_client.conf");
try {
ClientGlobal.init(resource.getClassLoader().getResource("fdfs_client.conf").getPath());
//
TrackerClient trackerClient = new TrackerClient();
TrackerServer trackerServer = trackerClient.getConnection();
//
StorageClient1 storageClient1 = new StorageClient1();
// , , apach common .
String extension = FilenameUtils.getExtension(name);
// meta
NameValuePair[] meta_list = new NameValuePair[3];
meta_list[0] = new NameValuePair("filename", name);
meta_list[1] = new NameValuePair("fileext", extension);
meta_list[2] = new NameValuePair("filesize", String.valueOf(size));
// path
path = storageClient1.upload_file1(pic, extension, meta_list);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return path;
}
}
여 기 는 FastdFS 의 핵심 방법 입 니 다.여 기 는 tracker 를 첫째 에 비유 하고 storage 를 동생 에 비유 합 니 다.또한 이 그림 에 meta 정 보 를 추가 하고 마지막 으로 upload 를 호출 합 니 다.file 1 그림 을 그림 서버 에 업로드 하고 path 로 되 돌려 줍 니 다.전체 개발 절 차 는 이 렇 습 니 다.나중에 복습 을 돌 이 켜 보면 더 큰 성 과 를 거 둘 수 있 기 를 바 랍 니 다.
위 에서 우 리 는 이미 ajax 가 비동기 업 로드 를 요청 했다 고 말 했 습 니 다.그러면 여기 서 여러 개의 사진 업 로드 를 다시 한 번 말씀 드 리 겠 습 니 다.만약 에 한 장의 사진 업로드 가 이미 밝 혀 졌 다 면 한 장의 사진 업 로드 는 매우 간단 해 보 입 니 다.
우선 jsp 페이지 를 계속 살 펴 보 겠 습 니 다.
이 js 는 업로드 클릭 후 하 는 일 을 처리 하 는 데 사 용 됩 니 다.그 중에서 리 턴 데 이 터 는 contrller 층 에서 받 은 데 이 터 를 사용 한 다음 foreach 를 사용 하여 옮 겨 다 닙 니 다.그러면 다음은 contrller 층 이 하 는 일 을 살 펴 보 겠 습 니 다.
//
@RequestMapping(value="/uploadPics.do")
public @ResponseBody List<String> uploadPics(@RequestParam(required=false) MultipartFile[] pics, HttpServletResponse response) throws Exception{
//
List<String> paths = new ArrayList<String>();
for (MultipartFile pic : pics) {
//Java FastDFS
String path = uploadService.uploadPic(pic.getBytes(), pic.getOriginalFilename(), pic.getSize());
paths.add(Constants.img_url+path);
}
return paths;
}
foreach 를 사용 하여 그림 의 url 주 소 를 모두 list 집합 에 불 러 온 다음 ajax 요청 함수 에 되 돌려 줍 니 다.서비스 계층:
@Service("uploadService")
public class UploadServiceImpl implements UploadService {
//
public String uploadPic(byte[] pic, String name, long size){
return FastDFSUtils.uploadPic(pic, name, size);
}
}
모든 것 이 그대로 입 니 다.다만 controller 층 과 jsp 는 foreach 로 옮 겨 다 녔 을 뿐 입 니 다.그리고 jsp 에 하나의 속성 을 추가 하 였 습 니 다:multiple="multiple".이것 뿐 입 니 다.자바 구현 이미지 가 FastDFS 입문 튜 토리 얼 에 올 라 가 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 이미지 가 FastDFS 에 올 라 가 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.