자바 구현 사진 FastDFS 입문 강좌 에 업로드

오늘부터 사진 업로드 기능 을 쓰 겠 습 니 다.현재 의 사진 업 로드 는 모두 업로드 가 완 료 된 후에 바로 표시 하고 페이지 가 새로 고침 되 지 않 는 것 을 강조 합 니 다.여 기 는 도대체 어떻게 하 는 것 입 니까?물론 ajax 의 도움 을 받 았 지만 ajax 는 양식 을 제출 할 수 없습니다.여기 서 우 리 는 하나의 플러그 인 을 빌려 야 합 니 다:jquery.form.js
나머지 하 나 는 패스 트 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 에 올 라 가 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!

좋은 웹페이지 즐겨찾기