java - 错误:415 - 尝试使用 python 作为后端上传图像时,android 中出现不支持的媒体类型错误
问题描述
我无法弄清楚为什么我会收到 415 响应。我只是想上传多个文件。我要上传的文件格式是 .jpg,我的后端支持它。
改造服务
@Multipart
@POST("http://localhost/service/request/upload")
Call <ResponseBody> uploadImages(@Header ("Authorization") String token, @Header("Content-Type") String type, @Part MultipartBody.Part file1, @Part MultipartBody.Part file2);
改造方法
private void uploadMultipleFiles() {
SharedPreferences preferences = getApplicationContext().getSharedPreferences("MY_APP", Context.MODE_PRIVATE);
String retrivedToken = "Token " + preferences.getString("TOKEN", null);
String attachment_one = preferences.getString("Attachement_one", null);
String attachement_two = preferences.getString("Attachement_two", null);
File file_one = new File(attachment_one);
File file_two = new File(attachement_two);
RequestBody requestBody1 = RequestBody.create(MediaType.parse("*/*"), file_one);
RequestBody requestBody2 = RequestBody.create(MediaType.parse("*/*"), file_two);
MultipartBody.Part fileToUpload1 = MultipartBody.Part.createFormData("file1", file_one.getName(), requestBody1);
MultipartBody.Part fileToUpload2 = MultipartBody.Part.createFormData("file2", file_two.getName(), requestBody2);
Call<ResponseBody> call = ServiceBuilder.getInstance().getApi().uploadImages(retrivedToken,"application/json", fileToUpload1, fileToUpload2);
call.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
if (!response.isSuccessful()) {
System.out.println("Response Code: " + response.code());
return;
} else {
System.out.println("Response Code: " + response.code());
}
}
@Override
public void onFailure(Call<ResponseBody> call, Throwable t) {
System.out.println("Message: " + t.getMessage());
}
});
}
上传文件的代码
attach_file.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M && checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 10001);
}
new MaterialFilePicker().withActivity(ServiceDetails.this).withRequestCode(1).withFilter(Pattern.compile(".*\\.(mkv|wmv|avi|mpeg|swf|mov|mp4|jpg|jpeg)$")).withHiddenFiles(true) // Show hidden files and folders
.start();
}
});
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1 && resultCode == RESULT_OK) {
String file_path = data.getStringExtra(FilePickerActivity.RESULT_FILE_PATH);
File source = new File(file_path);
SharedPreferences preferences = getApplicationContext().getSharedPreferences("MY_APP", Context.MODE_PRIVATE);
if (attachment_one.getText().toString().isEmpty()) {
preferences.edit().putString("Attachement_one", String.valueOf(source)).apply();
} else if (attachment_two.getText().toString().isEmpty()) {
preferences.edit().putString("Attachement_two", String.valueOf(source)).apply();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
switch (requestCode) {
case 10001: {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Toast.makeText(ServiceDetails.this, "Permission granted", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(ServiceDetails.this, "Permission not granted", Toast.LENGTH_LONG).show();
finish();
}
}
}
}
我是安卓新手。请帮我解决这个问题。百万提前感谢:)
解决方案
我通过更换解决了这个问题
Call<ResponseBody> call = ServiceBuilder.getInstance().getApi().uploadImages(retrivedToken,"application/json", fileToUpload1, fileToUpload2);
和
Call<ResponseBody> call = ServiceBuilder.getInstance().getApi().uploadImages(retrivedToken, "multipart/form-data", fileToUpload1, fileToUpload2);
推荐阅读
- neural-network - 神经网络 y=f(x) 回归
- vba - 从一个工作簿复制到另一个工作簿后更新数据透视表数据源
- c# - 将 ID 传递给 URL,ASP.NET MVC
- regex - 带有 ® 符号的正则表达式
- python - 使用python sqlalchemy,如何定义多列主键
- python - 在递归循环期间分配给 TensorFlow 变量
- python - Python - 格式化元组/字符串
- java - JUnit编译执行错误
- python - 通过文件夹内的 celery beat 调用任务会引发错误
- java - Android 应用:另一个 youtube 网址不加载视频