2017-04-24 59 views
0

我試圖重新建立一個curl命令使用System.Net.WebClient或其他方法來上傳在C#中的文件,上傳文件,而我只是沒有將文件發送運氣和名稱價值的東西在一起,以及curl使用的身份驗證。任何人都知道這個訣竅?我僅限於框架4.0。使用system.net.webclient

我只需要發送一個簡單的CSV文件到一個URL,如下所述:http://quickfuseapps.com/docs/api/sdb_upload_csv

命令本身是:

curl -u username:password -F tablekey=username:customers -F mode=replace -F [email protected] http://quickfuseapps.com/api/1/sdb/upload/csv 

我想這使用的代碼片段和I類發現,但它不會允許網絡憑證

Helpers.MultipartForm form = new Helpers.MultipartForm("http://quickfuseapps.com/api/1/sdb/upload/csv"); 
form.SetField("tablekey", "user:table"); 
form.SetField("mode", "replace"); 
// NO auth method to set credentials 

form.SendFile(@"d:\test.csv"); form.SetField("tablekey", "user:table"); 
form.SetField("mode", "replace"); 
// NO auth method to set credentials 

form.SendFile(@"d:\test.csv"); 

這裏的代碼,將設置表單字段和權威性,但不也允許文件上傳

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection(); 
    values.Add("app_id", "5gxWWnLlg"); 
    values.Add("tablekey", "user:table");     
    values.Add("dial_col", "PhoneNumber"); 
    values.Add("result_col", "outbound_result"); 

    client.Credentials = new NetworkCredential("user", "pwd"); 
    client.Encoding = Encoding.ASCII; 

    //var response = client.UploadValues("http://quickfuseapps.com/api/1/outbound/queue", values); 
    var response = client.UploadValues("http://quickfuseapps.com/api/1/outbound/queue/", "POST", values); 

    var responseString = Encoding.Default.GetString(response); 
} 
+0

你應該包括你嘗試了Web客戶端的代碼,並解釋如何不起作用。 – mason

+0

謝謝,我在一些代碼,我已經試過加入。 –

回答

1

下面是發佈MultipartFormContent和HttpClient而不是WebClient的示例。

using (var httpClient = 
     new HttpClient(new HttpClientHandler { Credentials = new NetworkCredential { <your credentials> } }) 
    { 
     var byteArrayContent = new ByteArrayContent(<.csv bytes read>); 
     byteArrayContent.Headers.ContentType = MediaTypeHeaderValue.Parse("text/csv"); 

     var response = await httpClient.PostAsync(_importUrl, new MultipartFormDataContent 
     { 
      {new StringContent(<formField1Value>), "\"<formfield1>\""}, 
      // more form field and values 
      {byteArrayContent, "\"file\"", "\"<your file name>\""} 
     }); 
    } 

這是用於.net 4.5。

注意\」中的MultipartFormDataContent,有一個在MultipartFormDataContent一個bug

在4.5.1 MultipartFormDataContent用正確的引號包裹的數據。

+0

你能看到這個嗎?https://stackoverflow.com/questions/48278333/php-curl-to-net-httprequest-files -uploading到服務器 –

相關問題