JAVA POST запрос MultiFormData с файлом и параметрами - PullRequest
0 голосов
/ 23 сентября 2019

Я пытаюсь сделать POST-запрос, используя «multipart / form-data», мне нужно опубликовать файл (код ниже) и 4 параметра (имя, категория ...) всех строк.

Я уже могу отправить файл, используя приведенный ниже код, но не с параметрами.

    // open a URL connection to the Servlet
    FileInputStream fileInputStream = new FileInputStream(sourceFile);
    URL url = new URL(upLoadServerUri);

    // Open a HTTP  connection to  the URL
    conn = (HttpURLConnection) url.openConnection();
    conn.setDoInput(true); // Allow Inputs
    conn.setDoOutput(true); // Allow Outputs
    conn.setUseCaches(false); // Don't use a Cached Copy
    conn.setRequestMethod("POST");
    conn.setRequestProperty("Connection", "Keep-Alive");
    conn.setRequestProperty("ENCTYPE", "multipart/form-data");
    conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
    conn.setRequestProperty("fileToUpload", fileName);

    dos = new DataOutputStream(conn.getOutputStream());

    dos.writeBytes(twoHyphens + boundary + lineEnd);
    dos.writeBytes("Content-Disposition: form-data; name=\"fileToUpload\";filename=" + fileName + "" + lineEnd);
    dos.writeBytes(lineEnd);

    // create a buffer of  maximum size
    bytesAvailable = fileInputStream.available();

    bufferSize = Math.min(bytesAvailable, maxBufferSize);
    buffer = new byte[bufferSize];

    // read file and write it into form...
    bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    while (bytesRead > 0) {

        dos.write(buffer, 0, bufferSize);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);

    }

    // send multipart form data necesssary after file data...
    dos.writeBytes(lineEnd);
    dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

    // Responses from the server (code and message)
    serverResponseCode = conn.getResponseCode();
    String serverResponseMessage = conn.getResponseMessage();

    Log.i("uploadFile", "HTTP Response is : " + serverResponseMessage + ": " + serverResponseCode);

    if (serverResponseCode == 200) {

        runOnUiThread(new Runnable() {
            public void run() {

                Toast.makeText(PerdidosEAchados.this, "File Upload Complete.",
                        Toast.LENGTH_SHORT).show();
            }
        });
    }

    //close the streams //
    fileInputStream.close();
    dos.flush();
    dos.close();

Код сервера

<?php
echo $_POST["Name"]) ;
echo $_POST["category "]) ;
?>

Я попытался добавить

dos.writeBytes("Content-Disposition: form-data; name=\"Name\";" + lineEnd);
                dos.writeBytes(lineEnd);
dos.writeBytes(Variable);

НоСервер никогда не регистрирует параметры, как я могу решить это?

1 Ответ

0 голосов
/ 23 сентября 2019

Может быть, вам стоит создать запрос POST, как демоверсию кода?Надеюсь, это поможет.

### Send a form with the text and file fields
POST https://httpbin.org/post
Content-Type: multipart/form-data; boundary=WebAppBoundary

--WebAppBoundary
Content-Disposition: form-data; name="Name"

myName

--WebAppBoundary
Content-Disposition: form-data; name="category"

myCategory

--WebAppBoundary
Content-Disposition: form-data; name="data"; filename=".gitignore"
Content-Type: application/json

< ./.gitignore
--WebAppBoundary--

<> 2019-09-23T045805.200.json

###
...