All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cottsoft.weedfs.client.WeedfsClient Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2005-2014 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 **************************************************************************
 * Date:       	    by:    		    Reason:   
 * 
 * 2015-8-12     	Simon.Hoo		Initial Version.
 *************************************************************************
 */
package com.cottsoft.weedfs.client;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.apache.http.HttpVersion;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;

import com.google.gson.Gson;

/**
 * Description:
* SeaweedFS HTTP Client. * * @author simon * @date 2015-8-12 * @version v1.0.0 */ public class WeedfsClient { private String masterHost = "127.0.0.1"; private int masterPort = 9333; private String assign ="dir/assign"; /** * Description:
* Cache local file to WeedFS Server * * @version v1.0.0 * @param file * @return */ public RequestResult cache(File file) { RequestResult result = null; Gson gson = new Gson(); if (!file.exists()) { throw new IllegalArgumentException("File doesn't exist"); } // HTTP REQUEST begin result = new RequestResult(); WeedAssign assignedInfo = null; BufferedReader in = null; // 1. Send assign request and get fid try { StringBuffer host = new StringBuffer(); host.append("http://"); host.append(this.masterHost); host.append(":"); host.append(this.masterPort); host.append("/"); //HttpUtil.request("http://" + this.masterHost + ":" + this.masterPort+ "/", "dir/assign", "GET") in = new BufferedReader(new InputStreamReader(HttpUtil.request(host.toString(), assign, EHttpMethod.GET))); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } // format HTTP Response to Assigned Info. assignedInfo = gson.fromJson(response.toString(),WeedAssign.class); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { try { // close input stream. if (in != null){ in.close(); } } catch (IOException e) { e.printStackTrace(); } } // 2. Send cache file request on volume server FileBody fileBody = new FileBody(file, "text/plain"); HttpClient client = new DefaultHttpClient(); client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); StringBuffer uri = new StringBuffer(); uri.append("http://"); uri.append(assignedInfo.getPublicUrl()); uri.append("/"); uri.append(assignedInfo.getFid()); HttpPost post = new HttpPost(uri.toString()); MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); entity.addPart("fileBody", fileBody); post.setEntity(entity); try { // Add File char. String response = EntityUtils.toString(client.execute(post).getEntity(),"UTF-8"); client.getConnectionManager().shutdown(); FileResult fileResult = gson.fromJson(response, FileResult.class); result.setFid(assignedInfo.getFid()); result.setSize(fileResult.getSize()); result.setStatus(true); result.setFileUrl(uri.toString()); return result; } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.toString()); } } /** * Description:
* Cache local file to WeedFS Server * * @version v1.0.0 * @param path * @return */ public RequestResult cache(String path) { if (path == null || path.length() == 0) { throw new IllegalArgumentException("Path cannot be empty"); } // HTTP REQUEST begin File file = new File(path); if (!file.exists()) { throw new IllegalArgumentException("File doesn't exist"); }else{ return this.cache(file); } } /** * Description:
* Get file from WeedFS Server * * @version v1.0.0 * @param fid * @param path * @return */ public RequestResult get(String fid) { RequestResult result = null; if (fid == null || fid.length() == 0) { throw new IllegalArgumentException("FID cannot be empty"); } // HTTP REQUEST String volumnId = fid.split(",")[0]; Location location = null; BufferedReader in = null; // 1. Get Volume address try { //HttpUtil.request("http://" + this.masterHost + ":" + this.masterPort + "/","dir/assign?volumeId=" + volumnId, "GET") StringBuffer host = new StringBuffer(); host.append("http://"); host.append(this.masterHost); host.append(":"); host.append(this.masterPort); host.append("/"); StringBuffer requestURI = new StringBuffer(); requestURI.append(this.assign); requestURI.append("?volumeId="); requestURI.append(volumnId); in = new BufferedReader(new InputStreamReader(HttpUtil.request(host.toString(), requestURI.toString(), EHttpMethod.GET))); String inputLine; StringBuffer response = new StringBuffer(); while ((inputLine = in.readLine()) != null) { response.append(inputLine); } Gson gson = new Gson(); location = gson.fromJson(response.toString(), Location.class); StringBuffer fileUrl = new StringBuffer(); fileUrl.append("http://"); fileUrl.append(location.getPublicUrl()); fileUrl.append("/"); fileUrl.append(fid); result = new RequestResult(); result.setFid(fid); result.setStatus(true); result.setFileUrl(fileUrl.toString()); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(e.getMessage()); } finally { try { if(in!=null){ in.close(); } } catch (IOException e) { e.printStackTrace(); } } return result; } /** * Description:
* Get file from WeedFS Server, retunr input stream * * @version v1.0.0 * @param fid * @return */ public InputStream getInputStream(String fid) { RequestResult result = this.get(fid); return HttpUtil.request(result.getFileUrl(), EHttpMethod.GET); } /** * Description:
* Delete file from WeedFS Server * * @version v1.0.0 * @param fid * @return */ public RequestResult delete(String fid) { RequestResult result = null; // Delete File from Volume Server try { RequestResult fileGetResult = this.get(fid); HttpUtil.request(fileGetResult.getFileUrl(), EHttpMethod.DELETE); result = new RequestResult(); result.setFid(fid); result.setFileUrl(fileGetResult.getFileUrl()); result.setSize(fileGetResult.getSize()); result.setStatus(true); } catch (Exception e) { throw new RuntimeException(e.toString()); } return result; } public String getMasterHost() { return masterHost; } public void setMasterHost(String masterHost) { this.masterHost = masterHost; } public int getMasterPort() { return masterPort; } public void setMasterPort(int masterPort) { this.masterPort = masterPort; } public String getAssign() { return assign; } public void setAssign(String assign) { this.assign = assign; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy