繁体   English   中英

如何在 Java 中的文件上传期间向我的 post 请求添加多个参数

[英]How can I add multiple parameters to my post request during file upload in Java

我终于使用核心 java 上传文件。 这是我的代码:

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.URL;
import java.net.URLConnection;

public class FileUpload {

    public static final String C_EMAIL = "email@gmail.com";
    public static final String C_PASSWORD = "password";

    public static void main(String args[]) {
        try {
            // Send data
            String url = "http://localhost/upload.php";
            File binaryFile = new File("C:\\wamp\\www\\image.png");
            // Just generate some unique random value.
            String boundary = Long.toHexString(System.currentTimeMillis());
            // Line separator required by multipart/form-data.
            String CRLF = "\r\n";
            URLConnection connection = new URL(url).openConnection();
            connection.setDoOutput(true);
            connection.setRequestProperty("Content-Type",
                "multipart/form-data; boundary=" + boundary);
            PrintWriter writer = null;
            try {
                OutputStream output = connection.getOutputStream();
                // true = autoFlush, important!
                writer = new PrintWriter(
                        new OutputStreamWriter(output, "UTF-8"), true);
                // Send normal param.
                writer.append("--" + boundary).append(CRLF);
                writer.append("Content-Disposition: form-data; name=\"email\"")
                        .append(CRLF);
                writer.append("Content-Type: text/plain; charset=" + "UTF-8")
                        .append(CRLF);
                writer.append(CRLF);
                writer.append(C_EMAIL).append(CRLF).flush();
                // Send binary file.
                writer.append("--" + boundary).append(CRLF);
                writer.append(
                    "Content-Disposition: form-data;"
                        + "name=\"file\"; filename=\"" + binaryFile.getName()
                        + "\"").append(CRLF);
                writer.append("Content-Type: "
                    + URLConnection.guessContentTypeFromName(binaryFile
                            .getName()) + CRLF);
                writer.append("Content-Transfer-Encoding: binary").append(CRLF);
                System.out.println("Content transfer set");
                writer.append(CRLF).flush();
                InputStream input = null;
                try {
                    System.out.println("Entered try");
                    input = new FileInputStream(binaryFile);
                    byte[] buffer = new byte[1024];
                    System.out.println("Before for loop");
                    for (int length = 0; (length = input.read(buffer)) > 0;) {
                        output.write(buffer, 0, length);
                    }
                    output.flush(); // Important! Output cannot be closed.
                    // Close of writer will close output as well.
                    System.out.println("output flushed");
                } finally {
                    if (input != null) try {
                        input.close();
                    } catch (IOException logOrIgnore) {}
                }
                writer.append(CRLF).flush(); // CRLF is important! It indicates
                // end of binary boundary.
                // End of multipart/form-data.
                writer.append("--" + boundary + "--").append(CRLF);
            } finally {
                if (writer != null) writer.close();
            }
            // Get the response
            BufferedReader rd = new BufferedReader(new InputStreamReader(
                    connection.getInputStream()));
            String line;
            while ((line = rd.readLine()) != null) {
                System.out.println(line);
            }
            rd.close();
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

在我的 PHP 脚本中,我能够获取正在上传的文件以及“电子邮件”参数及其值。
但是,我不知道如何再传递一个附加参数,即“密码”。
有人可以建议我吗?

使用 API 提供的java.net.URLConnection或更方便的Apache HttpComponents Client

也可以看看:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM