示例#1
0
 public static Task <FDFSFileInfo> GetFileInfoAsync(StorageNode storageNode, string fileName)
 {
     return(QUERY_FILE_INFO.Instance.GetRequest(storageNode.EndPoint,
                                                storageNode.GroupName,
                                                fileName)
            .GetResponseAsync <FDFSFileInfo>());
 }
示例#2
0
 public static async Task <string> UploadAppenderFileAsync(StorageNode storageNode, byte[] contentByte, string fileExt)
 {
     using (var contentStream = new MemoryStream(contentByte, false))
     {
         return(await UploadAppenderFileAsync(storageNode, contentStream, fileExt));
     }
 }
示例#3
0
        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_APPEND_FILE uploadAppendFile = new UPLOAD_APPEND_FILE
            {
                ConnectionType = FDFSConnectionType.StorageConnection,
                EndPoint       = storageNode.EndPoint
            };

            if (fileExt.Length > 6)
            {
                throw new FDFSException("file ext is too long");
            }

            const int bodyBufferLen = 15;

            uploadAppendFile.SetBodyBuffer(bodyBufferLen);

            int offset = 0;

            uploadAppendFile.BodyBuffer[offset++] = storageNode.StorePathIndex;

            Util.LongToBuffer(contentByteLength, uploadAppendFile.BodyBuffer, offset);
            offset += 8;

            var fileExtByteCount = Util.StringByteCount(fileExt);

            Util.StringToByte(fileExt, uploadAppendFile.BodyBuffer, offset, fileExtByteCount);
            if (fileExtByteCount < 6)
            {
                for (var i = offset + fileExtByteCount; i < offset + 6; i++)
                {
                    uploadAppendFile.BodyBuffer[i] = 0;
                }
            }

            uploadAppendFile.BodyStream = contentStream;

            var length = bodyBufferLen + contentByteLength;

            uploadAppendFile.Header = new FDFSHeader(length, FDFSConstants.STORAGE_PROTO_CMD_UPLOAD_APPENDER_FILE, 0);
            return(uploadAppendFile);
        }
示例#4
0
        public static async Task <string> UploadAppenderFileAsync(StorageNode storageNode, Stream contentStream, string fileExt)
        {
            var response = await UPLOAD_APPEND_FILE.Instance.GetRequest(storageNode,
                                                                        fileExt,
                                                                        contentStream)
                           .GetResponseAsync <UPLOAD_APPEND_FILE.Response>();

            return(response.FileName);
        }
示例#5
0
 public static async Task DownloadFileAsync(StorageNode storageNode, string fileName,
                                            IDownloadCallback downloadCallback,
                                            long offset = 0,
                                            long length = 0)
 {
     await DOWNLOAD_FILE.Instance
     .GetRequest(storageNode,
                 fileName,
                 Tuple.Create(offset, length),
                 downloadCallback)
     .GetResponseAsync <DOWNLOAD_FILE.Response>();
 }
示例#6
0
        public static async Task <byte[]> DownloadFileAsync(StorageNode storageNode, string fileName,
                                                            long offset = 0,
                                                            long length = 0)
        {
            using (var memoryStream = new MemoryStream(length > 0 ? (int)length : 0))
            {
                var downloadStream = new StreamDownloadCallback(memoryStream);
                await DownloadFileAsync(storageNode, fileName, downloadStream, offset, length);

                return(memoryStream.ToArray());
            }
        }