public override FDFSRequest GetRequest(params object[] paramList) { if (paramList.Length != 3) { throw new FDFSException("param count is wrong"); } StorageNode storageNode = (StorageNode)paramList[0]; string fileExt = (string)paramList[1] ?? string.Empty; if (fileExt.Length > 0 && fileExt[0] == '.') { fileExt = fileExt.Substring(1); } var contentStream = (Stream)paramList[2]; var contentByteLength = contentStream.Length; UPLOAD_FILE uploadFile = new UPLOAD_FILE { ConnectionType = FDFSConnectionType.StorageConnection, EndPoint = storageNode.EndPoint }; if (fileExt.Length > 6) { throw new FDFSException("file ext is too long"); } const int bodyBufferLen = 15; uploadFile.SetBodyBuffer(bodyBufferLen); int offset = 0; uploadFile.BodyBuffer[offset++] = storageNode.StorePathIndex; Util.LongToBuffer(contentByteLength, uploadFile.BodyBuffer, offset); offset += 8; var fileExtByteCount = Util.StringByteCount(fileExt); Util.StringToByte(fileExt, uploadFile.BodyBuffer, offset, fileExtByteCount); if (fileExtByteCount < 6) { for (var i = offset + fileExtByteCount; i < offset + 6; i++) { uploadFile.BodyBuffer[i] = 0; } } uploadFile.BodyStream = contentStream; long length = bodyBufferLen + contentStream.Length; uploadFile.Header = new FDFSHeader(length, FDFSConstants.STORAGE_PROTO_CMD_UPLOAD_FILE, 0); return(uploadFile); }
public override FDFSRequest GetRequest(params object[] paramList) { if (paramList.Length != 3) { throw new FDFSException("param count is wrong"); } StorageNode storageNode = (StorageNode)paramList[0]; string fileExt = (string)paramList[1]; byte[] contentByte = (byte[])paramList[2]; int contentByteLength = contentByte.Length; UPLOAD_FILE uploadFile = new UPLOAD_FILE { ConnectionType = FDFSConnectionType.StorageConnection, EndPoint = storageNode.EndPoint }; if (fileExt.Length > 6) { throw new FDFSException("file ext is too long"); } int length = 15 + contentByteLength; uploadFile.SetBodyBuffer(length); int offset = 0; uploadFile.BodyBuffer[offset++] = storageNode.StorePathIndex; Util.LongToBuffer(contentByteLength, uploadFile.BodyBuffer, offset); offset += 8; var fileExtByteCount = Util.StringByteCount(fileExt); Util.StringToByte(fileExt, uploadFile.BodyBuffer, offset, fileExtByteCount); if (fileExtByteCount < 6) { for (var i = offset + fileExtByteCount; i < offset + 6; i++) { uploadFile.BodyBuffer[i] = 0; } } offset += 6; Array.Copy(contentByte, 0, uploadFile.BodyBuffer, offset, contentByte.Length); uploadFile.Header = new FDFSHeader(length, FDFSConstants.STORAGE_PROTO_CMD_UPLOAD_FILE, 0); return(uploadFile); }