Из приведенного ниже кода я конвертирую изображение в байтовый массив, а затем отправляю его на сервер через многокомпонентные данные, используя метод публикации REST API.Он отправляет bytearray на сервер, но когда я получаю одно и то же изображение с сервера, я получаю сообщение о том, что формат изображения поврежден.Я не могу понять ошибку.
public static async Task < HomeWorkResponse > CreateHomeWork(HomeWorkRequest homeWork, UserData user) {
try {
MultipartFormDataContent Mfdc = new MultipartFormDataContent();
System.Net.Http.HttpClient httpClient = new System.Net.Http.HttpClient();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
MultipartFormDataContent form = new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture));
List < KeyValuePair < string,
string >> Post_parameters = null;
string token = "";
var result = await ServerMethods.GetTokenForTLE();
if (result != null && !string.IsNullOrEmpty(result.response.token)) {
token = result.response.token;
}
//Convert Image into bytearray
for (int i = 0; i < homeWork.attachmentspath.Count; i++) {
Mfdc = new MultipartFormDataContent();
StorageFile sfs = await StorageFile.GetFileFromPathAsync(homeWork.attachmentspath[i]);
FileStream fileStream = null;
byte[] imageByteArray = null;
using(var stream = await sfs.OpenReadAsync()) {
imageByteArray = new byte[stream.Size];
using(var reader = new DataReader(stream)) {
await reader.LoadAsync((uint) stream.Size);
reader.ReadBytes(imageByteArray);
}
}
//Add that bytearray into http content
HttpContent content = new ByteArrayContent(imageByteArray, 0, imageByteArray.Length);
Mfdc.Add(content);
content.Headers.ContentType = MediaTypeHeaderValue.Parse(sfs.ContentType);
content.Headers.ContentDisposition = new ContentDispositionHeaderValue("filename");
content.Headers.ContentDisposition.FileName = sfs.DisplayName;
Mfdc.Headers.ContentType = MediaTypeHeaderValue.Parse(sfs.ContentType);
form.Add(Mfdc, i.ToString(), homeWork.attachments[i]);
}
//Add different types of data in form data
form.Add(new StringContent(user.user_id), "user_id");
form.Add(new StringContent(user.user_session_id), "session_id");
form.Add(new StringContent(homeWork.subject_id), "subject_id");
form.Add(new StringContent(homeWork.section_id), "section_id");
form.Add(new StringContent(homeWork.class_id), "class_id");
form.Add(new StringContent(user.school_id), "school_id");
form.Add(new StringContent(homeWork.assignment_title), "title");
form.Add(new StringContent(homeWork.content), "content");
form.Add(new StringContent("class-section"), "channel");
form.Add(new StringContent("mobile"), "origin");
form.Add(new StringContent("homework"), "type");
form.Add(new StringContent(""), "homework_id");
form.Add(new StringContent(homeWork.target_date), "target_date");
form.Add(new StringContent(homeWork.section_id), "classsec_ids");
form.Add(new StringContent(""), "group_ids");
form.Add(new StringContent(""), "file_list");
form.Add(new StringContent("class"), "assign_to");
form.Add(new StringContent(token), "token");
//send the data on server through REST API using post method
System.Net.Http.HttpResponseMessage response = await httpClient.PostAsync(string.Format(UrlHelpers.TLE_TEACHER_CREATE_HOMEWORK_URL), form);
response.EnsureSuccessStatusCode();
httpClient.Dispose();
string sd = response.Content.ReadAsStringAsync().Result;
var DeserializeObject = JsonConvert.DeserializeObject < HomeWorkResponse > (sd);
return (HomeWorkResponse) Convert.ChangeType(DeserializeObject, typeof(HomeWorkResponse));
}
catch(Exception e) {
}
}
Из этого кода я конвертирую свое изображение в байтовый массив из моей системы
for (int i = 0; i < homeWork.attachmentspath.Count; i++) {
Mfdc = new MultipartFormDataContent();
StorageFile sfs = await StorageFile.GetFileFromPathAsync(homeWork.attachmentspath[i]);
FileStream fileStream = null;
byte[] imageByteArray = null;
using(var stream = await sfs.OpenReadAsync()) {
imageByteArray = new byte[stream.Size];
using(var reader = new DataReader(stream)) {
await reader.LoadAsync((uint) stream.Size);
reader.ReadBytes(imageByteArray);
}
}
И это код в Java, который использовался командой Android иих изображения загружены успешно
ArrayList<String> stringArrayList = new ArrayList<>();
stringArrayList = sourceFileUr;
// defaultHttpClient
InputStream inputStream;
File sourceFile;
byte[] data;
MultipartEntity entity = new MultipartEntity();
JSONObject jsonObject = new JSONObject();
InputStreamBody inputStreamBody;
if (stringArrayList != null && stringArrayList.size() > 0) {
String allFile = "";
for (int i = 0; i < stringArrayList.size(); i++) {
String fileName = stringArrayList.get(i).substring(stringArrayList.get(i).lastIndexOf("/") + 1);
String Fullpath = stringArrayList.get(i);
sourceFile = new File(Fullpath);
inputStream = new FileInputStream(sourceFile);
data = IOUtils.toByteArray(inputStream);
inputStreamBody = new InputStreamBody(new ByteArrayInputStream(data), fileName);
entity.addPart("" + i, inputStreamBody);
// entity.addPart("file_name", new StringBody(fileName));
jsonObject.put("" + i, Fullpath);
}
}