【问题标题】:how to pass the multiple parameter in URL如何在 URL 中传递多个参数
【发布时间】:2013-11-21 10:19:58
【问题描述】:

我正在尝试将 post 方法中的 URL 中的两个参数传递给 http 连接,但没有获得任何成功,任何人都可以帮我解决代码是

URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    // add request header
    con.setRequestMethod("POST");
    con.setDoOutput(true);
    con.setDoInput(true);
    con.setRequestProperty("Content-type", "application/x-www-form-urlencoded");

    JsonObject requestData = new JsonObject();
    requestData.addProperty("email", "nitin@eye-watch.in");
    requestData.addProperty("name", "nitin malik");
    requestData.addProperty("phone_no", "9540825737");

    File fileToUpload = new File("/home/nitin/Desktop/clientdcs.jpg");

    String urlParameters = "form=" + requestData.toString() + "&file=" + fileToUpload;

    // Send post request
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(urlParameters);
    wr.flush();
    wr.close();

【问题讨论】:

  • 记得form-encode你的数据:String urlParameters = "form=" + URLEncoder.encode(requestData.toString(), "UTF-8") + "&file=" + URLEncoder.encode(fileToUpload, "UTF-8");
  • URLEncoder.encode(fileToUpload, "UTF-8");文件不支持此项。
  • 改成URLEncoder.encode(fileToUpload.toString(), "UTF-8")
  • 如何访问 HttpServlet 中请求对象中的 urlParameters,通过执行 URLEncoder.encode(fileToUpload.toString(), "UTF-8") 文件现在是字符串格式。获取我拥有的真实文件解码文件。或 servlet 3.0 对此有好处吗?
  • 通过这样做,我可以在请求中发送数据 String urlParameters = "form=" + URLEncoder.encode(mainData.toString(),"UTF-8") + "&file=" +URLEncoder .encode(fileToUpload.toString(),"UTF-8");但是当我尝试通过 String ufl = request.getParameter("file");那个时候 /home/nitin/Desktop/clientdcs.jpg 如何在文件中输入 /*String urlParameters = "form=" + URLEncoder.encode(mainData.toString(),"UTF-8") + "&file=" ;*/ // 发送 post 请求 DataOutputStream wr = new DataOutputStream(con.getOutputStream()); wr.writeBytes(urlParameters); wr.flush();

标签: java http jakarta-ee servlets


【解决方案1】:

当您想要发送文件的内容时,您通常希望使用multipart/form-data 作为您的 Content-Type。

可以使用 JavaMail 库构建多部分/表单数据消息:

MimeBodyPart formPart = new MimeBodyPart();
formPart.setContent(
    URLEncoder.encode(requestData.toString(), "UTF-8"),
    "application/x-www-form-urlencoded");
formPart.setDisposition("form-data; name=\"form\"");

MimeBodyPart filePart = new MimeBodyPart();
filePart.attachFile(fileToUpload);
ContentDisposition disposition = new ContentDisposition("form-data");
disposition.getParameterList().set("name", "file");
disposition.getParameterList().set("filename", fileToUpload.toString(), "UTF-8");
filePart.setDisposition(disposition.toString());

MimeMultipart multipart = new MimeMultipart("form-data");
multipart.addBodyPart(formPart);
multipart.addBodyPart(filePart);

try (OutputStream out = con.getOutputStream()) {
    multipart.writeTo(out);
}

一个Servlet可以使用HttpServletRequest的getPart方法读取表单数据:

Part formPart = request.getPart("form");
ByteBuffer buffer = ByteBuffer.allocate((int) formPart.getSize());
try (ReadableByteChannel in =
        Channels.newChannel(formPart.getInputStream()) {
    while (buffer.hasRemaining()) {
        in.read(buffer);
    }
}
String encoded = new String(buffer.array(), StandardCharsets.UTF_8);
String form = URLDecoder.decode(encoded, "UTF-8");

Part filePart = request.getPart("file");
File sentFile = new File(filePart.getName());
File file = new File(downloadDirectory, sentFile.getName());
filePart.write(file.toString());

【讨论】:

  • 感谢您的支持
猜你喜欢
  • 2012-06-12
  • 2016-02-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 2020-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多