我想使用RequestBody
POST在retrofit2
中添加文件。但是响应在呼叫响应中总是“没有这样的文件或目录”。我不知道问题出在哪里。
Manidest权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
这是方法:
public static void stackoverflowGuysHelpMePls(){
File file = new File("android.resource://myapps.me.test/drawable/myimage");
ApiInterface apiInterface = ApiClient.getApiClient().create(ApiInterface.class);
RequestBody requestFile =
RequestBody.create(MediaType.parse("image/*"),file);
MultipartBody.Part body = MultipartBody.Part.createFormData("data",file.getName(),requestFile);
Call<JsonObject> call = apiInterface.addSound4( body);
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call,
Response<JsonObject> response) {
Log.v("xxx", "success");
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
Log.e("xxx", ":( "+t.getMessage());
}
});
}
谢谢,
答案 0 :(得分:0)
将此功能放在下面以获取文件正文对象
@NonNull
public static MultipartBody.Part prepareFilePart(String partName, String fileUri) {
File file = new File(fileUri);
String mimeType = URLConnection.guessContentTypeFromName(file.getName());
RequestBody requestFile = RequestBody.create(MediaType.parse(mimeType), file);
return MultipartBody.Part.createFormData(partName, file.getName(), requestFile);
}
并将此代码替换为代码
Uri fileUrl = Uri.parse("android.resource://myapps.me.test/drawable/myimage");
MultipartBody.Part body = prepareFilePart("data",fileUrl);
这样可行。
答案 1 :(得分:0)
使用此
if (file != null) {
RequestBody requestFile =
RequestBody.create(MediaType.parse("multipart/form-
data"),file);
MultipartBody.Part body =
MultipartBody.Part.createFormData("data",file.getName(),requestFile);
}
答案 2 :(得分:0)
查看评论我认为错误与无法加载资源有关,堆栈跟踪可以帮助更多地解决这个问题。
尝试传递File
。
ByteArray
对象
试试这个:(kotlin)
val resourceAsBitmap = BitmapFactory.decodeResource(resources, R.drawable.test)
val stream = ByteArrayOutputStream()
resourceAsBitmap?.compress(Bitmap.CompressFormat.JPEG, 100, stream)
RequestBody.create(MediaType.parse("image/*"), stream.toByteArray())
在java中它会是这样的:
Bitmap resourceAsBitmap = BitmapFactory.decodeResource(resources, R.drawable.test); // here use R.drawable.your_resource
ByteArrayOutputStream stream = new ByteArrayOutputStream();
if (resourceAsBitmap != null) {
resourceAsBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream.toByteArray());
}
可能在这里或那里有一些可能的IOExceptions。