Как загрузить файл на сервер Node Js - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь загрузить файл на сервер Node.js, но безуспешно.

Я пробовал это в течение нескольких дней, и я готов принять все;фиксированное предположение о моем подходе, или даже совершенно другой проверенный подход, который работает.

С моим кодом я получаю ошибку TypeError: Cannot read property 'filename' of undefined на стороне Node , и я получаю только вызов 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;
}

Узловая сторона

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)

    res.sendStatus(200);
})

Почемуя терплю неудачу с этим.

Спасибо всем заранее.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2018

Прежде всего, извините за плохой английский

req.image выглядит неопределенным.

Я думаю, что если Малтер использовал, будет req.file.image.filename

req.image => req.file.image // check req.file or req.files I confused.

IN ADDITION,

TypeError: Невозможно прочитать свойство 'filename' из undefined

Этот тип ошибки действительно легко найти в js.

Это означает foo.bar.undefined.filename

Просто найдите, где оно используется.(в случае имени файла)

0 голосов
/ 26 декабря 2018
console.log('file.fieldname : ' + req.image.filename);

замените на

console.log(req);

И посмотрите, что у вас внутри запроса.Остановка узла выдает ошибку и должна вернуть 200.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...