【问题标题】:How to upload file from Android to node.js server如何将文件从 Android 上传到 node.js 服务器
【发布时间】:2017-08-15 04:01:49
【问题描述】:

我正在尝试通过 http 从 android 应用程序向 node.js 服务器发送文件。

但是,当我收到文件时,它的大小是 0 字节, 虽然我可以读取文件的原始名称。

你知道这里出了什么问题吗?

这里是安卓部分:

public class ImageUploader {

public static final String HTTP_LOCALHOST_8081_FILE_UPLOAD = "http://192.168.1.104:8081/file_upload";

public void upload(InputStream inputStream, String extension) {
    AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
    RequestParams requestParams = prepareRequestParams(inputStream, extension);

    asyncHttpClient.post(HTTP_LOCALHOST_8081_FILE_UPLOAD, requestParams, new AsyncHttpResponseHandler() {
        @Override
        public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
        }

        @Override
        public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
            error.printStackTrace();
        }
    });

}

private RequestParams prepareRequestParams(InputStream inputStream, String extension) {
    RequestParams requestParams = new RequestParams();
    requestParams.put("image", inputStream, "image." + extension, "image/jpeg");
    return requestParams;
}}

这里是 node.js 部分:

var express = require('express')
var multer = require('multer')
var app = express()
var path = require('path')
var uploading = require('./uploading/uploading.js')

var storage = multer.diskStorage({
  destination: function(req, file, cb) {
    cb(null, 'uploads/')
  },
  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) {
  //uploading.openIrfanView(__dirname, req.file.filename)

  res.sendStatus(200);
})

var server = app.listen(8081, function() {})

我的猜测是 java inputStream 不适合 http multipart 请求,或者我需要使用一些特殊的节点库来读取发送的内容。

【问题讨论】:

    标签: android node.js image-uploading multer android-async-http


    【解决方案1】:

    好的,我明白了。

    这不是我第一次偶然发现的东西 - 这是从输入流中读取清空它。

    我从Uri获得inputStream,然后第一次读取它以显示在设备的屏幕上,然后第二次将它传递给ImageUploader,到那时@987654324 @ 已经是空的了。

    我可能应该将那段代码粘贴到问题中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-31
      • 2022-06-22
      • 2014-09-21
      • 2011-06-25
      相关资源
      最近更新 更多