C# Xamarin:将图像上载到服务器
我需要上传图像到服务器使用api。 现在我正在使用C# Xamarin:将图像上载到服务器,c#,api,xamarin,xamarin.forms,C#,Api,Xamarin,Xamarin.forms,我需要上传图像到服务器使用api。 现在我正在使用System.Net.Http byte[] lFileBytes= DependencyService.Get<IFileHelper>().ReadAllBytes(ImagePath); ByteArrayContent lFileContent = new ByteArrayContent(lFileBytes,0,lFileBytes.Length); lFileContent.Headers.ContentDisposit
System.Net.Http代码>
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();
}
}
}
如果您仍然需要,这对我很有用:
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
}
}
这对我有帮助
MultipartFormDataContent lContent=new MultipartFormDataContent();
byte[] lBytes = DependencyService.Get<IFileHelper>().ReadAllBytes(filename);
ByteArrayContent lFileContent= new ByteArrayContent(lBytes);
lFileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = filename,
Name = "imgFile"
};
lFileContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
lContent.Add(lFileContent);
HttpResponseMessage lRequestResponse=await lHttpClient.PostAsync(await url, lContent);
尝试在MemoryStream
块的第一行设置streamReader.Position=0
。可能是that@user1,streamReader没有位置属性,可能是memoryStream?但这不是工作;你的上传代码在哪里?你用什么方法?您是否有服务器方法的示例?Fiddler能用吗?@Rohit更新上传代码,发布。我没有服务器部分。我使用“邮递员”进行api测试。
MultipartFormDataContent lContent=new MultipartFormDataContent();
byte[] lBytes = DependencyService.Get<IFileHelper>().ReadAllBytes(filename);
ByteArrayContent lFileContent= new ByteArrayContent(lBytes);
lFileContent.Headers.ContentDisposition = new ContentDispositionHeaderValue("form-data")
{
FileName = filename,
Name = "imgFile"
};
lFileContent.Headers.ContentType = new MediaTypeHeaderValue("image/png");
lContent.Add(lFileContent);
HttpResponseMessage lRequestResponse=await lHttpClient.PostAsync(await url, lContent);
namespace Client.iOS
{
public class FileHelper : IFileHelper
{
private string GetLocalFilePath(string filename)
{
string docFolder = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string libFolder = Path.Combine(docFolder, "..", "images", "Databases");
if (!Directory.Exists(libFolder))
{
Directory.CreateDirectory(libFolder);
}
return Path.Combine(libFolder, filename);
}
public byte[] ReadAllBytes(string filename)
{
string path=GetLocalFilePath(filename);
return (FileStream(path) as MemoryStream).ToArray();
}
private Stream FileStream(string path)
{
StreamReader lStreamReader = new StreamReader(path);
MemoryStream lMemoryStream = new MemoryStream();
lMemoryStream.Position = 0;
lStreamReader.BaseStream.CopyTo(lMemoryStream);
return lMemoryStream;
}
}
}