public int uploadFile() { StorageServer storageServer = null; StorageClient1 client = new StorageClient1(trackerServer, storageServer); byte[] file_buff; string file_id; file_buff = new byte[2 * 1024]; Arrays.fill(file_buff, (byte)65); try { file_id = client.upload_file1(file_buff, "txt", null); if (file_id == null) { Console.WriteLine("upload file fail, error code: " + client.getErrorCode()); return(-1); } file_ids.Enqueue(file_id); return(0); } catch (Exception ex) { Console.WriteLine("upload file fail, error mesg: " + ex.Message); return(-1); } }
public void initStorageClient() { ClientGlobal.init(CONF_NAME); Log.Information("network_timeout=" + ClientGlobal.g_network_timeout + "ms"); Log.Information("charset=" + ClientGlobal.g_charset); TrackerClient tracker = new TrackerClient(); trackerServer = tracker.getTrackerServer(); StorageServer storageServer = null; storageClient = new StorageClient(trackerServer, storageServer); }
public int downloadFile(string file_id) { int errno; StorageServer storageServer = null; StorageClient1 client = new StorageClient1(trackerServer, storageServer); try { errno = client.download_file1(file_id, this.callback); if (errno != 0) { Console.WriteLine("Download file fail, file_id: " + file_id + ", error no: " + errno); } return(errno); } catch (Exception ex) { Console.WriteLine("Download file fail, error mesg: " + ex.Message); return(-1); } }
public void main(string[] args) { if (args.Length < 2) { Console.WriteLine("Error: Must have 2 parameters, one is config filename, " + "the other is the local filename to upload"); return; } string conf_filename = args[0]; string local_filename = args[1]; try { ClientGlobal.init(conf_filename); Console.WriteLine("network_timeout=" + ClientGlobal.g_network_timeout + "ms"); Console.WriteLine("charset=" + ClientGlobal.g_charset); TrackerClient tracker = new TrackerClient(); TrackerServer trackerServer = tracker.getTrackerServer(); StorageServer storageServer = null; StorageClient1 client = new StorageClient1(trackerServer, storageServer); NameValuePair[] metaList = new NameValuePair[1]; metaList[0] = new NameValuePair("fileName", local_filename); string fileId = client.upload_file1(local_filename, null, metaList); Console.WriteLine("upload success. file id is: " + fileId); int i = 0; while (i++ < 10) { byte[] result = client.download_file1(fileId); Console.WriteLine(i + ", download result is: " + result.Length); } } catch (Exception ex) { Log.Error(ex.Message + ex.StackTrace); } }
/** * entry point * * @param args comand arguments * <ul><li>args[0]: config filename</li></ul> * <ul><li>args[1]: local filename to upload</li></ul> */ public static void main(string[] args) { if (args.Length < 2) { Console.WriteLine("Error: Must have 2 parameters, one is config filename, " + "the other is the local filename to upload"); return; } Console.WriteLine("dotnetcore.version=" + typeof(object).GetTypeInfo().Assembly.GetName().Version.ToString()); string conf_filename = args[0]; string local_filename = args[1]; try { ClientGlobal.init(conf_filename); Console.WriteLine("network_timeout=" + ClientGlobal.g_network_timeout + "ms"); Console.WriteLine("charset=" + ClientGlobal.g_charset); long startTime; string group_name; string remote_filename; ServerInfo[] servers; TrackerClient tracker = new TrackerClient(); TrackerServer trackerServer = tracker.getTrackerServer(); StorageServer storageServer = null; /* * storageServer = tracker.getStoreStorage(trackerServer); * if (storageServer == null) * { * Console.WriteLine("getStoreStorage fail, error code: " + tracker.getErrorCode()); * return; * } */ StorageClient client = new StorageClient(trackerServer, storageServer); byte[] file_buff; NameValuePair[] meta_list; string[] results; string master_filename; string prefix_name; string file_ext_name; string generated_slave_filename; int errno; meta_list = new NameValuePair[4]; meta_list[0] = new NameValuePair("width", "800"); meta_list[1] = new NameValuePair("heigth", "600"); meta_list[2] = new NameValuePair("bgcolor", "#FFFFFF"); meta_list[3] = new NameValuePair("author", "Mike"); file_buff = ClientGlobal.g_charset.GetBytes("this is a test"); Console.WriteLine("file Length: " + file_buff.Length); group_name = null; StorageServer[] storageServers = tracker.getStoreStorages(trackerServer, group_name); if (storageServers == null) { Log.Error("get store storage servers fail, error code: " + tracker.getErrorCode()); } else { Log.Error("store storage servers count: " + storageServers.Length); for (int k = 0; k < storageServers.Length; k++) { Log.Error((k + 1) + ". " + storageServers[k].getInetSocketAddress().Address + ":" + storageServers[k].getInetSocketAddress().Port); } Log.Error(""); } startTime = DateTime.Now.Ticks; results = client.upload_file(file_buff, "txt", meta_list); Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms"); /* * group_name = ""; * results = client.upload_file(group_name, file_buff, "txt", meta_list); */ if (results == null) { Log.Error("upload file fail, error code: " + client.getErrorCode()); return; } else { group_name = results[0]; remote_filename = results[1]; Log.Error("group_name: " + group_name + ", remote_filename: " + remote_filename); Log.Error(client.get_file_info(group_name, remote_filename).ToString()); servers = tracker.getFetchStorages(trackerServer, group_name, remote_filename); if (servers == null) { Log.Error("get storage servers fail, error code: " + tracker.getErrorCode()); } else { Log.Error("storage servers count: " + servers.Length); for (int k = 0; k < servers.Length; k++) { Log.Error((k + 1) + ". " + servers[k].getIpAddr() + ":" + servers[k].getPort()); } Log.Error(""); } meta_list = new NameValuePair[4]; meta_list[0] = new NameValuePair("width", "1024"); meta_list[1] = new NameValuePair("heigth", "768"); meta_list[2] = new NameValuePair("bgcolor", "#000000"); meta_list[3] = new NameValuePair("title", "Untitle"); startTime = DateTime.Now.Ticks; errno = client.set_metadata(group_name, remote_filename, meta_list, (byte)ProtoCommon.STORAGE_SET_METADATA_FLAG_MERGE); Console.WriteLine("set_metadata time used: " + (DateTime.Now.Ticks - startTime) + " ms"); if (errno == 0) { Log.Error("set_metadata success"); } else { Log.Error("set_metadata fail, error no: " + errno); } meta_list = client.get_metadata(group_name, remote_filename); if (meta_list != null) { for (int i = 0; i < meta_list.Length; i++) { Console.WriteLine(meta_list[i].getName() + " " + meta_list[i].getValue()); } } //Thread.sleep(30000); startTime = DateTime.Now.Ticks; file_buff = client.download_file(group_name, remote_filename); Console.WriteLine("download_file time used: " + (DateTime.Now.Ticks - startTime) + " ms"); if (file_buff != null) { Console.WriteLine("file Length:" + file_buff.Length); Console.WriteLine(ClientGlobal.g_charset.GetString(file_buff)); } file_buff = ClientGlobal.g_charset.GetBytes("this is a slave buff"); master_filename = remote_filename; prefix_name = "-part1"; file_ext_name = "txt"; startTime = DateTime.Now.Ticks; results = client.upload_file(group_name, master_filename, prefix_name, file_buff, file_ext_name, meta_list); Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms"); if (results != null) { Log.Error("slave file group_name: " + results[0] + ", remote_filename: " + results[1]); generated_slave_filename = ProtoCommon.genSlaveFilename(master_filename, prefix_name, file_ext_name); if (generated_slave_filename != results[1]) { Log.Error("generated slave file: " + generated_slave_filename + "\n != returned slave file: " + results[1]); } Log.Error(client.get_file_info(results[0], results[1]).ToString()); } startTime = DateTime.Now.Ticks; errno = client.delete_file(group_name, remote_filename); Console.WriteLine("delete_file time used: " + (DateTime.Now.Ticks - startTime) + " ms"); if (errno == 0) { Log.Error("Delete file success"); } else { Log.Error("Delete file fail, error no: " + errno); } } results = client.upload_file(local_filename, null, meta_list); if (results != null) { string file_id; int ts; string token; string file_url; InetSocketAddress inetSockAddr; group_name = results[0]; remote_filename = results[1]; file_id = group_name + StorageClient1.SPLIT_GROUP_NAME_AND_FILENAME_SEPERATOR + remote_filename; inetSockAddr = trackerServer.getInetSocketAddress(); file_url = "http://" + inetSockAddr.Address; if (ClientGlobal.g_tracker_http_port != 80) { file_url += ":" + ClientGlobal.g_tracker_http_port; } file_url += "/" + file_id; if (ClientGlobal.g_anti_steal_token) { ts = (int)(DateTime.Now.Ticks / 1000); token = ProtoCommon.getToken(file_id, ts, ClientGlobal.g_secret_key); file_url += "?token=" + token + "&ts=" + ts; } Log.Error("group_name: " + group_name + ", remote_filename: " + remote_filename); Log.Error(client.get_file_info(group_name, remote_filename).ToString()); Log.Error("file url: " + file_url); errno = client.download_file(group_name, remote_filename, 0, 0, "c:\\" + remote_filename.Replace("/", "_")); if (errno == 0) { Log.Error("Download file success"); } else { Log.Error("Download file fail, error no: " + errno); } errno = client.download_file(group_name, remote_filename, 0, 0, new DownloadFileWriter("c:\\" + remote_filename.Replace("/", "-"))); if (errno == 0) { Log.Error("Download file success"); } else { Log.Error("Download file fail, error no: " + errno); } master_filename = remote_filename; prefix_name = "-part2"; file_ext_name = null; startTime = DateTime.Now.Ticks; results = client.upload_file(group_name, master_filename, prefix_name, local_filename, null, meta_list); Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms"); if (results != null) { Log.Error("slave file group_name: " + results[0] + ", remote_filename: " + results[1]); generated_slave_filename = ProtoCommon.genSlaveFilename(master_filename, prefix_name, file_ext_name); if (generated_slave_filename != results[1]) { Log.Error("generated slave file: " + generated_slave_filename + "\n != returned slave file: " + results[1]); } Log.Error(client.get_file_info(results[0], results[1]).ToString()); } } System.IO.FileInfo f; f = new System.IO.FileInfo(local_filename); int nPos = local_filename.LastIndexOf('.'); if (nPos > 0 && local_filename.Length - nPos <= ProtoCommon.FDFS_FILE_EXT_NAME_MAX_LEN + 1) { file_ext_name = local_filename.Substring(nPos + 1); } else { file_ext_name = null; } results = client.upload_file(null, f.Length, new UploadLocalFileSender(local_filename), file_ext_name, meta_list); if (results != null) { group_name = results[0]; remote_filename = results[1]; Console.WriteLine("group name: " + group_name + ", remote filename: " + remote_filename); Console.WriteLine(client.get_file_info(group_name, remote_filename)); master_filename = remote_filename; prefix_name = "-part3"; startTime = DateTime.Now.Ticks; results = client.upload_file(group_name, master_filename, prefix_name, f.Length, new UploadLocalFileSender(local_filename), file_ext_name, meta_list); Console.WriteLine("upload_file time used: " + (DateTime.Now.Ticks - startTime) + " ms"); if (results != null) { Log.Error("slave file group_name: " + results[0] + ", remote_filename: " + results[1]); generated_slave_filename = ProtoCommon.genSlaveFilename(master_filename, prefix_name, file_ext_name); if (generated_slave_filename != results[1]) { Log.Error("generated slave file: " + generated_slave_filename + "\n != returned slave file: " + results[1]); } Log.Error(client.get_file_info(results[0], results[1]).ToString()); } } else { Log.Error("Upload file fail, error no: " + errno); } storageServer = tracker.getFetchStorage(trackerServer, group_name, remote_filename); if (storageServer == null) { Console.WriteLine("getFetchStorage fail, errno code: " + tracker.getErrorCode()); return; } /* for test only */ Console.WriteLine("active test to storage server: " + storageServer.getConnection().activeTest()); /* for test only */ Console.WriteLine("active test to tracker server: " + trackerServer.getConnection().activeTest()); } catch (Exception ex) { Log.Error(ex.Message + ex.StackTrace); } }
/// <summary> /// constructor with trackerServer and storageServer /// NOTE: if not necessary, do NOT set storage server instance /// </summary> /// <param name="trackerServer">the tracker server, can be null</param> /// <param name="storageServer">the storage server, can be null</param> public StorageClient1(TrackerServer trackerServer, StorageServer storageServer) : base(trackerServer, storageServer) { }
public static void main(string[] args) { try { if (args.Length < 1) { Console.WriteLine("Usage: 2 parameters, one is config filename, " + "the other is the local filename to upload"); return; } string conf_filename = args[0]; string local_filename; string ext_name; if (args.Length > 1) { local_filename = args[1]; ext_name = null; } else if (Environment.OSVersion.Platform == PlatformID.Win32NT) { local_filename = "c:/windows/system32/notepad.exe"; ext_name = "exe"; } else { local_filename = "/etc/hosts"; ext_name = ""; } ClientGlobal.init(conf_filename); Console.WriteLine("network_timeout=" + ClientGlobal.g_network_timeout + "ms"); Console.WriteLine("charset=" + ClientGlobal.g_charset); TrackerGroup tg = new TrackerGroup(new InetSocketAddress[] { new InetSocketAddress("47.95.221.159", 22122) }); TrackerClient tc = new TrackerClient(tg); TrackerServer ts = tc.getTrackerServer(); if (ts == null) { Console.WriteLine("getTrackerServer return null"); return; } StorageServer ss = tc.getStoreStorage(ts); if (ss == null) { Console.WriteLine("getStoreStorage return null"); } StorageClient1 sc1 = new StorageClient1(ts, ss); NameValuePair[] meta_list = null; //new NameValuePair[0]; string fileid = sc1.upload_file1(local_filename, ext_name, meta_list); Console.WriteLine("Upload local file " + local_filename + " ok, fileid: " + fileid); } catch (Exception ex) { Log.Error(ex.Message + ex.StackTrace); } }
/// <summary> /// query storage servers to upload file /// </summary> /// <param name="trackerServer">the tracker server</param> /// <param name="groupName">the group name to upload file to, can be empty</param> /// <returns> storage servers, return null if fail</returns> public StorageServer[] getStoreStorages(TrackerServer trackerServer, string groupName) { byte[] header; string ip_addr; int port; byte cmd; int out_len; Connection connection; if (trackerServer == null) { trackerServer = getTrackerServer(); if (trackerServer == null) { return(null); } } connection = trackerServer.getConnection(); Stream outStream = connection.getOutputStream(); try { if (groupName == null || groupName.Length == 0) { cmd = ProtoCommon.TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITHOUT_GROUP_ALL; out_len = 0; } else { cmd = ProtoCommon.TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ALL; out_len = ProtoCommon.FDFS_GROUP_NAME_MAX_LEN; } header = ProtoCommon.packHeader(cmd, out_len, (byte)0); outStream.Write(header, 0, header.Length); if (groupName != null && groupName.Length > 0) { byte[] bGroupName; byte[] bs; int group_len; bs = ClientGlobal.g_charset.GetBytes(groupName); bGroupName = new byte[ProtoCommon.FDFS_GROUP_NAME_MAX_LEN]; if (bs.Length <= ProtoCommon.FDFS_GROUP_NAME_MAX_LEN) { group_len = bs.Length; } else { group_len = ProtoCommon.FDFS_GROUP_NAME_MAX_LEN; } Arrays.fill(bGroupName, (byte)0); Array.Copy(bs, 0, bGroupName, 0, group_len); outStream.Write(bGroupName, 0, bGroupName.Length); } ProtoCommon.RecvPackageInfo pkgInfo = ProtoCommon.recvPackage(connection.getInputStream(), ProtoCommon.TRACKER_PROTO_CMD_RESP, -1); this.errno = pkgInfo.errno; if (pkgInfo.errno != 0) { return(null); } if (pkgInfo.body.Length < ProtoCommon.TRACKER_QUERY_STORAGE_STORE_BODY_LEN) { this.errno = ProtoCommon.ERR_NO_EINVAL; return(null); } int ipPortLen = pkgInfo.body.Length - (ProtoCommon.FDFS_GROUP_NAME_MAX_LEN + 1); const int recordLength = ProtoCommon.FDFS_IPADDR_SIZE - 1 + ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE; if (ipPortLen % recordLength != 0) { this.errno = ProtoCommon.ERR_NO_EINVAL; return(null); } int serverCount = ipPortLen / recordLength; if (serverCount > 16) { this.errno = ProtoCommon.ERR_NO_ENOSPC; return(null); } StorageServer[] results = new StorageServer[serverCount]; byte store_path = pkgInfo.body[pkgInfo.body.Length - 1]; int offset = ProtoCommon.FDFS_GROUP_NAME_MAX_LEN; for (int i = 0; i < serverCount; i++) { ip_addr = Strings.Get(pkgInfo.body, offset, ProtoCommon.FDFS_IPADDR_SIZE - 1).Trim(); offset += ProtoCommon.FDFS_IPADDR_SIZE - 1; port = (int)ProtoCommon.buff2long(pkgInfo.body, offset); offset += ProtoCommon.FDFS_PROTO_PKG_LEN_SIZE; results[i] = new StorageServer(ip_addr, port, store_path); } return(results); } catch (IOException ex) { try { connection.close(); } catch (IOException ex1) { throw ex1; } finally { connection = null; } throw ex; } finally { if (connection != null) { try { connection.release(); } catch { } } } }