2017-01-16 190 views
0

我需要使用api將圖片上傳到服務器。 現在我使用System.Net.Http;Xamarin:將圖片上傳到服務器

byte[] lFileBytes= DependencyService.Get<IFileHelper>().ReadAllBytes(ImagePath); 
ByteArrayContent lFileContent = new ByteArrayContent(lFileBytes,0,lFileBytes.Length); 
lFileContent.Headers.ContentDisposition = ContentDispositionHeaderValue.Parse("form-data"); 
lFileContent.Headers.ContentType=new MediaTypeHeaderValue("image/jpg"); 
lFileContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("name","file")); 
lFileContent.Headers.ContentDisposition.Parameters.Add(new NameValueHeaderValue("filename", "9.jpg")); 
lFileContent.Headers.ContentLength= lFileBytes.Length; 
lContent.Add(lFileContent); 

    public byte[] ReadAllBytes(string path) { 
       using (var streamReader = new StreamReader(path)) 
       { 
        using (var memoryStream = new MemoryStream()) 
        { 
         streamReader.BaseStream.CopyTo(memoryStream); 
         return memoryStream.ToArray(); 
        } 
       } 
      } 

發送請求後,我有錯誤Type file is invalid 我想問題byte[] ReadAllBytes(string path) 對於請求我可以使用流或字節[] 請幫助 UPDATE

lRequestResponse = await lHttpClient.PostAsync("URL", lContent); 
+0

嘗試在'MemoryStream'塊的第一行設置'streamReader.Position = 0'。它可能是 – user1

+0

@ user1,streamReader沒有Position屬性,也許是memoryStream?但它不工作; – KreminT

+0

你的上傳代碼在哪裏?你用什麼方法?你也有你的服務器方法的樣本?它從小提琴手工作? –

回答

0

在你仍然需要的情況下,這個工作對我來說:

var cont = new MultipartFormDataContent(); 
var image = new StreamContent(img.Image.GetStream()); 
cont.Add(image, "\"file\"", img.FileName); 
var uri = App.apiurl + $"FileUpload/" + img.FileName + "/"; 
using (var client = new HttpClient()) 
{ 
    var response = await client.PostAsync(uri, cont); 
    if (response.StatusCode != System.Net.HttpStatusCode.OK) 
    { 
     // return error code 
    } 

}