Android上传图片到PHP服务器:net.gotev:uploadservice4.6.0 MultipartUploadRequest用法
修复方案&完整实现代码
问题根因说明
你遇到的两个错误分别是语法错误和版本API变更导致的调用不兼容:
- Java方法参数列表不能写
void,4.6.0版本通知配置需要接收上传ID作为入参 - 4.x版本相比2.x新增了强制初始化要求,部分API参数类型发生了变更,未适配就会抛出
IllegalArgumentException
第一步:全局初始化配置
先在你的Application类的onCreate方法中添加初始化代码:
public class MyApp extends Application { @Override public void onCreate() { super.onCreate(); // 初始化UploadService,三个参数分别为上下文、通知默认图标、是否开启调试日志 UploadServiceConfig.initialize(this, R.drawable.ic_upload, BuildConfig.DEBUG); } }
第二步:修正通知配置方法
4.x版本通知点击意图需要传入PendingIntent,方法入参改为上传ID:
private UploadNotificationConfig getNotificationConfig(String uploadId) { if (!displayNotification.isChecked()) { return null; } return new UploadNotificationConfig() .setIcon(R.drawable.ic_upload) .setCompletedIcon(R.drawable.ic_upload_success) .setErrorIcon(R.drawable.ic_upload_error) .setTitle(filename) .setInProgressMessage(getString(R.string.uploading)) .setCompletedMessage(getString(R.string.upload_success)) .setErrorMessage(getString(R.string.upload_error)) .setAutoClearOnSuccess(autoClearOnSuccess.isChecked()) .setClickIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)) .setClearOnAction(true) .setRingToneEnabled(true); }
第三步:修正上传请求代码
Multipart请求默认就是POST不需要额外设置,先开启/关闭通知开关再绑定配置:
try { // 执行上传前请先确认已获取文件读取权限:Android13+需READ_MEDIA_IMAGES,低版本需READ_EXTERNAL_STORAGE String uploadId = new MultipartUploadRequest(this, Constants.UPLOAD_URL) .addHeader("User-Agent", getString(R.string.app_name) + "/" + BuildConfig.VERSION_NAME) .addParameter("name", name) .addParameter("commentsEnabled", "true") .addParameter("downloadEnabled", "true") .addParameter("waitTranscoding", "true") // 这里需确保path路径有效、APP有该文件的读取权限,否则会抛出参数异常 .addFileToUpload(path, "image") // 先设置通知开关 .setNotificationEnabled(displayNotification.isChecked()) // 绑定通知配置方法 .setNotificationConfig(this::getNotificationConfig) .setMaxRetries(2) .startUpload(); } catch (IOException | IllegalArgumentException e) { // 分别处理文件读取错误、参数非法错误 e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者remov
相关产品推荐
相关产品推荐

