2014-03-05 118 views

回答

1

在写作没有.NET库提供异步上传文件的Rackspace的云文件的时间。 但是,有一个承诺,即openstack.net的V2将提供异步支持。

您可以使用HttpClient的现在:

public static async Task<bool> UploadFileAsync(string filepath, string container, string filename) 
{ 
    var httpClient = new HttpClient(); 

    var requestMessage = new HttpRequestMessage(HttpMethod.Post, 
     @"https://identity.api.rackspacecloud.com/v2.0/tokens") 
    { 
     Content = new StringContent(
      @"{ 
       ""auth"": { 
        ""RAX-KSKEY:apiKeyCredentials"": { 
        ""username"": ""username"", 
        ""apiKey"": ""apikey"" 
       } 
      } 
    }") 
    }; 

    requestMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json"); 

    var response = await httpClient.SendAsync(requestMessage); 

    var responseContent = await response.Content.ReadAsStringAsync(); 

    var obj = JObject.Parse(responseContent); 
    var tokenId = obj.SelectToken("access.token.id").ToObject<string>(); 

    var endpointPublicURL = obj.SelectToken("access.serviceCatalog[?(@.name == 'cloudFiles')].endpoints[0].publicURL"); 


    var fileBytes = File.ReadAllBytes(filepath); 
    using (var httpContent = new ByteArrayContent(fileBytes)) 
    { 
     httpContent.Headers.Add("X-Auth-Token", tokenId); 
     httpContent.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); 
     httpContent.Headers.ContentLength = fileBytes.LongLength; 

     var result = await httpClient.PutAsync(endpointPublicURL + "/" + container + "/" filename, httpContent); 
    } 
    return true; 
} 
0

穆罕默德 -

虽然不是异步的,我有一个MVC 4的例子,说明如何在上传过程中显示进度条。

它今天早上做了。你可以在这里找到它:

https://github.com/DonSchenck/ProgressBarMVC4

让我知道如果这能帮助,或者如果你需要更多。

一切顺利,

- 唐·申克,OpenStack.NET开发倡导者,Rackspace公司

+0

谢谢唐的答复,其实这不是我问。我问的是异步发送文件/队列不是普通的方式。不管怎样,谢谢你 :) –

相关问题