예제 #1
0
    public async Task <String> Upload(ResumableUploadDetails resumableUpload)
    {
        UploadResponse uploadInfo = null;

        for (int i = 0; i < resumableUpload.NumberOfUnits; i++)
        {
            Console.WriteLine("##############  Uploading unit {0}  ##############", i);
            uploadInfo = await UploadUnit(i, resumableUpload);

            Console.WriteLine("\n\n");
        }


        int chunk = 0;

        foreach (short word in uploadInfo.ResumableUpload.Bitmap.Words)
        {
            for (int j = 0; j < 16 && chunk < uploadInfo.ResumableUpload.NumberOfUnits; j++, chunk++)
            {
                if ((word & 0x1) != 1)
                {
                    Console.WriteLine("Chunk {0}, failed to upload", chunk);
                }
            }
        }

        if (uploadInfo.ResumableUpload.AllUnitsReady == false)
        {
            Console.WriteLine("Some chunks weren't uploaded.");
            return("fail chunks weren't uploaded.");
        }

        do
        {
            var uploadDetails = await _agent.Upload.PollUpload(uploadInfo.DoUpload.Key);

            if (uploadDetails.IsComplete)
            {
                Console.WriteLine("File quick key is {0}", uploadDetails.QuickKey);
                return("pass File quick key is {0}");
            }
        } while (true);
    }
예제 #2
0
    private async Task <UploadResponse> UploadUnit(int unit, ResumableUploadDetails resumableUpload)
    {
        var block    = new byte[resumableUpload.UnitSize];
        var unitSize = _fileStream.Read(block, 0, block.Length);
        var unitHash = GetBlockHash(block, unitSize);

        var headers = new Dictionary <string, string>
        {
            { MediaFireApiConstants.ContentTypeHeader, MediaFireApiConstants.ResumableUploadContentTypeValue },
            { MediaFireApiConstants.FileNameHeader, FileName },
            { MediaFireApiConstants.FileSizeHeader, FileLength.ToString() },
            { MediaFireApiConstants.FileHashHeader, FileHash },

            { MediaFireApiConstants.UnitHashHeader, unitHash },
            { MediaFireApiConstants.UnitIdHeader, unit.ToString() },
            { MediaFireApiConstants.UnitSizeHeader, unitSize.ToString() },
        };


        var parameters = new Dictionary <string, object>
        {
            //{MediaFireApiParameters.QuickKey, ""}      ,
            //{MediaFireApiParameters.ActionOnDuplicate, MediaFireActionOnDuplicate.Replace}               ,
            //{MediaFireApiParameters.FolderKey, ""}      ,
            ///etc
        };

        var contentToUpload = new MemoryStream(block, 0, unitSize);



        return(await _agent.PostStreamAsync <UploadResponse>(MediaFireApiUploadMethods.Resumable, contentToUpload, parameters, headers, progress: new Progress <MediaFireOperationProgress>(
                                                                 (s) =>
        {
            Console.Write(".");
        })));
    }