Ошибка при загрузке файла с приложением Nativescript - PullRequest
0 голосов
/ 23 апреля 2019

Я пытаюсь загрузить файл на локальный сервер с телефона Android с помощью Nativescript.Я получаю код ответа -1, но дело в том, что иногда эта загрузка работает, поэтому очень сложно понять, почему.Нет никаких исключений ни на сервере, ни на телефоне, когда это происходит.

// file path and url
   let params = [{ name: "test", value: "value" }];

   for (let i in this.filesToUpload) {
        let file = this.filesToUpload[i];
        let param = { 
            name: file.substr(file.lastIndexOf("/") + 1), 
            value: file, 
            filename: file, 
            mimeType: "image/jpeg" 
        };
        params.push(param);
    }



    // upload configuration
    var session = httpbackground.session("file-upload");
    var request = {
            url: "http://192.168.0.3:8080/accounting/payments/create",
            method: "POST",
            headers: {
                "Content-Type": "application/octet-stream",
                "name": 'name'
            },
            description: "Upload payments",
            androidAutoDeleteAfterUpload: true
        };

    var task = session.multipartUpload(params, request);

Я пытался добавить android:usesCleartextTraffic="true" в AndroidManifest.xml, но я не думаю, что это может быть проблемой, потому что нижевызовы работают.

getString("http://192.168.0.3:8080/accounting/payments/get")
    .then((r: string) => {
        console.log(r);
    }, (e) => {
        console.log(e);
    });

const httpModule = require("http");
httpModule.request({
    url: "http://192.168.0.3:8080/accounting/payments/post",
    method: "POST",
    headers: { "Content-Type": "application/json" },
    content: JSON.stringify({
        username: "Tebogo",
        password: "passpas1"
    })
}).then((response) => {
    console.log(response);
    const result = response.content.toJSON();
}, (e) => {
    console.log(e);
});

Это методы моего Spring Boot Controller, возможно, я делаю что-то ужасно неправильное.

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@RestController
@RequestMapping("/payments")
public class PaymentsController {

    @RequestMapping(value = "create", method = RequestMethod.POST, consumes = { MediaType.MULTIPART_FORM_DATA_VALUE,
            MediaType.APPLICATION_OCTET_STREAM_VALUE })
    public void handleFileUpload(HttpServletRequest servletRequest, @RequestParam MultipartFile[] images) {

        Map<String, String[]> parameterMap = servletRequest.getParameterMap();
        for (Entry<String, String[]> as : parameterMap.entrySet()) {
            System.out.println(as.getValue());
        }

        for (MultipartFile as : images) {
            System.out.println(as.getName());
        }

    }

    @RequestMapping(value = "post", method = RequestMethod.POST)
    public Map<String, Object> post(@RequestBody Object param) {
        Map<String, Object> map = new LinkedHashMap<>();
        map.put("date", new Date());
        map.put("param", param);
        return map; 
    }

    @RequestMapping(value = "get", method = RequestMethod.GET)
    public String get() {
        return "gotten";
    }

}

NB: Этот файлзагрузка иногда работает.

...