Я отправляю файл изображения в веб-службу wcf, используя модификацию, при сохранении стороны веб-службы wcf я не могу сохранить файл потока.
В Android я создаю как
//ApiInterface.class
@Multipart
@POST("RestService/json/PostUploadFile/")
Call<UploadFileResponse> uploadFile(@Part MultipartBody.Part file);
вызов службы будет похож на
File file = new File(assets.get(0).getPath());
RequestBody requestFile = RequestBody.create(MediaType.parse("multipart/form-data"), file);
// MultipartBody.Part is used to send also the actual file name
MultipartBody.Part part = MultipartBody.Part.createFormData("imageData", file.getName(), requestFile);
//api call method
callUploadFile(part, this);
private void callUploadFile(MultipartBody.Part part,
MainInteractor.OnFinishedListener listenerP) {
final MainInteractor.OnFinishedListener listener = listenerP;
HashMap<String, String> headerMap = new HashMap<>();
headerMap.put("SessionID", "");
headerMap.put("UserName", "");
OkHttpClient httpClient = ConnectToService.newInstance().addHeaders(getContext(), headerMap);
ApiInterface apiService =
ConnectToService.newInstance()
.getClient(httpClient).create(ApiInterface.class);
Call<UploadFileResponse> call = apiService.uploadFile(part);
call.enqueue(new Callback<UploadFileResponse>() {
@Override
public void onResponse(Call<UploadFileResponse> call, Response<UploadFileResponse> response) {
onFinished(response.body().getResult());
}
@Override
public void onFailure(Call<UploadFileResponse> call, Throwable t) {
if (t.getLocalizedMessage() != null) {
onFinishedFailure(t.getLocalizedMessage());
}
}
});
}
В веб-службе wcf я получаю данные в сообщении, но при сохранении получаю ошибку исключения аргумента.
РЕДАКТИРОВАНИЕ: ниже работает код
Bitmap bm = BitmapFactory.decodeFile(assets.get(finalX).getPath());
Bitmap bitmap = Bitmap.createScaledBitmap(bm, 480, 480, true);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 80, baos); //bm is the bitmap object
byte[] byteArray = baos.toByteArray();
RequestBody body = RequestBody.create(MediaType.parse("application/octet-stream"), byteArray);
callUploadFile(body, "File_" + finalX, MainFragment.this);
метод вызова
private void callUploadFile(RequestBody body, String fileName,
MainInteractor.OnFinishedListener listenerP) {
final MainInteractor.OnFinishedListener listener = listenerP;
HashMap<String, String> headerMap = new HashMap<>();
headerMap.put("SessionID", "");
headerMap.put("UserName", "");
headerMap.put("FileName", fileName);
OkHttpClient httpClient = ConnectToService.newInstance().addHeaders(getContext(), headerMap);
ApiInterface apiService =
ConnectToService.newInstance()
.getClient(httpClient).create(ApiInterface.class);
Call<UploadFileResponse> call = apiService.uploadFile(body);
call.enqueue(new Callback<UploadFileResponse>() {
@Override
public void onResponse(Call<UploadFileResponse> call, Response<UploadFileResponse> response) {
if (response != null && response.body() != null) {
onFinished(response.body().getResult());
} else {
if (response.message() != null) {
onFinishedFailure(response.message());
}
}
}
@Override
public void onFailure(Call<UploadFileResponse> call, Throwable t) {
if (t.getLocalizedMessage() != null) {
onFinishedFailure(t.getLocalizedMessage());
}
}
});
}
В услуге wcf
public string uploadFile(Stream imageData)
{
string fileName = WebOperationContext.Current.IncomingRequest.Headers.Get("fileName");
string fileFullPath = "D:\\Share\\srinidhi\\Temp_" + fileName + ".Jpeg";
Image img = System.Drawing.Image.FromStream(imageData);
img.Save(fileFullPath, ImageFormat.Jpeg);
return "success";
}
В API вызов
@POST("RestService/json/PostUploadFile/")
Call<UploadFileResponse> uploadFile(@Body RequestBody bytes);