java - 如何从 Android 上传文件到 Node.js 服务器

标签 java android node.js file-upload

我正在尝试将文件上传到 Node.js 服务器,但没有成功。

我不断收到错误 TypeError: Cannot read property 'filename' of undefinedNode 端,我只收到 onFailure 调用, 而不是 onSuccess

以下是我目前所拥有的:

Java 端

public void upload(final String filePath) {

    AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
    RequestParams requestParams = prepareRequestParams(filePath);

    asyncHttpClient.post(LOCALHOST_FILE_UPLOAD_URL, requestParams, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody) {
            Log.v("MyApp", "SUCCESS");
        }

        @Override
        public void onFailure(int statusCode, cz.msebera.android.httpclient.Header[] headers, byte[] responseBody, Throwable error) {
            error.printStackTrace();
            Log.v("MyApp", "FAIL");

        }
    });

}

private RequestParams prepareRequestParams(String filePath) {

    InputStream inputStream = null;
    try {
        inputStream = new FileInputStream(filePath);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    RequestParams requestParams = new RequestParams();
    try {
        requestParams.put("image", inputStream, "image", new File(filePath).toURL().openConnection().getContentType());
    } catch (IOException e) {
        e.printStackTrace();
    }
    return requestParams;
}

Node 端

var storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'rev_uploads/')

        console.log('file.fieldname : ' + file.fieldname)
    },
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '_' + Date.now() + path.extname(file.originalname))
    }
})

var upload = multer({
    storage: storage
})

app.use(express.static('public'));

app.post('/file_upload', upload.single('image'), function (req, res) {

    console.log('file.fieldname : ' + req.image.filename)
    //uploading.openIrfanView(__dirname, req.file.filename)

    res.sendStatus(200);
})

为什么我会失败。

提前谢谢大家。

最佳答案

NodeJS

//multers disk storage settings;
const storage = multer.diskStorage({
        destination: function (req, file, cb) {
            cb(null, './files/uploads/');
        },
        filename: function (req, file, cb) {
            var datetimestamp = Date.now();
            cb(null, file.fieldname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length - 1]);
        }
    }),
    //multer settings
    upload = multer({
        storage: storage
    }).single('file');



file.prototype.upload = function (req, res) {
    console.log('=============================== Upload :  Files ===============================');
    let response = new Response();
    upload(req, res, function (err) {
        if (err) {
            console.log('===== Files > Upload Error: ' + _util.inspect(err));
            res.status(405).json(response.error(err, َ'Face to problem.'));
        } else {
            console.log('===== Files > Upload ok');
            console.log(req.file.path);
            res.status(200).json(response.success(req.file.path, 'Success'));
        }
    });
};

关于java - 如何从 Android 上传文件到 Node.js 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53908808/

相关文章:

java - 线程安全否定 AtomicBoolean get() 作为 while 循环中的条件

java - 替换格式化值中 DecimalFormat 的分组分隔符

java - 短信管理器不工作。我还在 list 中包含了许可

java - 重建一些代码以根据概率返回损坏或未命中(游戏)

node.js - `npm update` 之后无法再发布 VS Code 扩展吗?

javascript - 使用 Node.js 实时文本

java - Apache Nutch 2.3.1 远程命令失败

android - onRequestPermissionsResult 未在 fragment android 中调用

android - 在 Android 中使用 Butterknife

javascript - 尝试让coffescript正确编译为 Node 服务器的javascript