使用Ion上传Android文件,但上传文件为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Ion上传Android文件,但上传文件为空相关的知识,希望对你有一定的参考价值。

我用Ion上传回来了成功。但上传的文件是空的。 作为来自wireshark的数据包转储,Ion没有发送文件内容。

我弄错了什么?

这是我的代码。

MyFragment.java

Ion.with(getContext())
        .load(uploadUrl)
        .uploadProgressHandler(new ProgressCallback() {
            @Override
            public void onProgress(long downloaded, long total) {
                LOG.debug("" + downloaded + " / " + total);
            }
        })
        .setMultipartFile("file", new File(currentPhotoPath))
        .asJsonObject()
        .setCallback(new FutureCallback<JsonObject>() {
            @Override
            public void onCompleted(Exception e, JsonObject result) {
                String msg;
                if (e != null) {
                    LOG.error("upload failed:", e);
                } else {
                    LOG.info("upload completed: {}", result.toString());
                }
        });

我正在使用android studio 3.0和LG G 5.0版。

build.gradle android {compileSdkVersion 26 buildToolsVersion '26 .0.2'

defaultConfig {
    applicationId "kr.co.digitalpie.dansok"
    minSdkVersion 17  //Android 4.2 Jelly Bean
    targetSdkVersion 26 
    versionCode 55
    versionName "4.0.0"
    multiDexEnabled true
dependencies {
    compile 'com.koushikdutta.ion:ion:2.+'
    ...

Whireshark packet dump

enter image description here

来自whireshark,Ion没有正确发送文件。 所以我检查了我的设备本地照片是否有效。 上传照片位于/storage/emulated/0/Pictures/DigitalPie/P_20171214_141206_2058037049.jpg,它的大小是350Kbytes。

答案

这完全是我的愚蠢错误造成的。在开始上传之前,我的另一个asynctask试图压缩它,但失败了。因此,压缩图像是空的。

我通过记录如下发现了我的错误。

LOG.info("uploading filesize: " + currentPhotoPath.getSize());
Ion.with(getContext())
 ...

日志说uploading filesize: 0

希望我的愚蠢错误能够帮助别人。

以上是关于使用Ion上传Android文件,但上传文件为空的主要内容,如果未能解决你的问题,请参考以下文章

Python烧瓶使用ajax request.files上传文件为空

上传的文件为空文件

PHP:检查动态添加的文件上传是不是为空

文件删除上传数据传输为空Angular 2

AJAX 上传后 $_FILES 为空

使用浏览器、微信、钉钉上传、发送磁盘附件时显示此文件夹为空?