1 /**
2 * Upload File to DFS.
3 * @param fileBuff, file to be uploaded.
4 * @param uploadFileName, the name of the file.
5 * @param fileLength, the length of the file.
6 * @return the file ID in DFS.
7 * @throws IOException
8 */
9 public String uploadFile(InputStream inStream, String uploadFileName, long fileLength) throws IOException {
10 byte[] fileBuff = getFileBuffer(inStream, fileLength);
11 String fileId = "";
12 String fileExtName = "";
13 if (uploadFileName.contains(".")) {
14 fileExtName = uploadFileName.substring(uploadFileName.lastIndexOf(".") + 1);
15 } else {
16 logger.warn("Fail to upload file, because the format of filename is illegal.");
17 return fileId;
18 }
19
20
21 //建立连接
22 TrackerClient tracker = new TrackerClient();
23 TrackerServer trackerServer = tracker.getConnection();
24 StorageServer storageServer = null;
25 StorageClient1 client = new StorageClient1(trackerServer, storageServer);
26
27
28 //设置元信息
29 NameValuePair[] metaList = new NameValuePair[3];
30 metaList[0] = new NameValuePair("fileName", uploadFileName);
31 metaList[1] = new NameValuePair("fileExtName", fileExtName);
32 metaList[2] = new NameValuePair("fileLength", String.valueOf(fileLength));
33
34
35 //上传文件
36 try {
37 fileId = client.upload_file1(fileBuff, fileExtName, metaList);
38 } catch (Exception e) {
39 logger.warn("Upload file \"" + uploadFileName + "\"fails");
40 }
41 trackerServer.close();
42 return fileId;
43 }
3、调用方式详解
(1)客户端与Tracker Server通信
根据《FastDFS的配置、部署与API使用解读(1)Get Started with
FastDFS》一文中提供的FastDFS的工作原理,结合上面的代码,首先通过TrackerClient构造函数从全局配置中获取Tracker
Servers的IP和端口初始化一个TrackerClient对象tracker,并与其建立连接,我们可以从API的源码中看到:
1 /**
2 * constructor with global tracker group
3 */
4 public TrackerClient()
5 {
6 this.tracker_group = ClientGlobal.g_tracker_group;
7 }
8 /**
9 * constructor with specified tracker group
10 * @param tracker_group the tracker group object
11 */
12 public TrackerClient(TrackerGroup tracker_group)
13 {
14 this.tracker_group = tracker_group;
15 }