Я пытаюсь отправить изображение, используя модификацию 2, используя приведенный ниже код, но полученное изображение повреждено и не может быть открыто с помощью средства просмотра фотографий Windows. У вас есть два снимка экрана ниже, первый - это содержимое, которое я анализирую как строку, а второе - сообщение, которое я получаю, когда пытаюсь открыть изображение.
Я пробовал разные варианты чтения потока отправленного изображения, но ни один не работает. Одним из них является код в wcf, а двумя другими опциями, которые я использовал, является код, который комментируется, но ни один из них не работает. Надеюсь, кто-нибудь может мне помочь.
@Multipart
@POST("PostImageJSON")
Call<String> PostImage(@Part MultipartBody.Part report_image);
MediaType imageType = MediaType.parse("image/*");
File file = new File(ImagePath+"/savedReportPhoto.jpg");
if(file.exists()) {
RequestBody requestBodyImage = RequestBody.create(imageType, file);
MultipartBody.Part image = MultipartBody.Part.createFormData("uploadedImage", file.getName(), requestBodyImage);
Call<String> callSendImage = api.PostImage(image);
progress.setTitle("Procesim");
progress.setMessage("Duke procesuar..");
progress.setCancelable(false); // disable dismiss by tapping outside of the dialog
progress.show();
callSendImage.enqueue(new Callback<String>() {
@Override
public void onResponse(Call<String> call, Response<String> response) {
if (response.isSuccessful()) {
String responseimg = response.body();
progress.dismiss();
} else {
Toast.makeText(getApplicationContext(), "Something went wrong with the request to the server !", Toast.LENGTH_SHORT).show();
progress.dismiss();
}
}
@Override
public void onFailure(Call<String> call, Throwable t) {
progress.dismiss();
Toast.makeText(getApplicationContext(), t.getMessage(), Toast.LENGTH_SHORT).show();
}
});
}
[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/PostImageJSON", BodyStyle = WebMessageBodyStyle.Bare, RequestFormat = WebMessageFormat.Json,
ResponseFormat = WebMessageFormat.Json)]
String PostImage(Stream postedImage);
public String PostImage(Stream postedImage)
{
//Here i parse the stream as string for testing purposes
StreamReader reader = new StreamReader(postedImage);
string res = reader.ReadToEnd();
using (StreamWriter writer = new StreamWriter("F:\\image.txt", true))
{
writer.WriteLine(res);
}
//First option i have tried
//do
//{
// bytesRead = postedImage.Read(buffer, 0, buffer.Length);
// totalBytesRead += bytesRead;
// ms.Write(buffer, 0, bytesRead);
//} while (bytesRead > 0);
//using (FileStream fs = File.OpenWrite("F:\\postedImage.png"))
//{
// ms.WriteTo(fs);
// fs.Close();
// ms.Close();
//}
//Second option i have tried
byte[] buffer = new byte[19127];
postedImage.Read(buffer, 0, 19127);
FileStream f = new FileStream("F:\\savedReportPhoto.jpg", FileMode.OpenOrCreate);
f.Write(buffer, 0, buffer.Length);
f.Close();
postedImage.Close();
return "Recieved the image on server";
//Third option i have tried
//FileStream f = new FileStream("F:\\savedReportPhoto.jpg", FileMode.OpenOrCreate);
//postedImage.CopyTo(f);
//f.Close();
//postedImage.Close();
//return "Recieved the image on server";
}
Содержимое изображения, которое я получаю в виде строки
Когда я пытаюсь открыть фотографию в Windows PhotoViewer