Upload and POST file to PHP page with Java

前端 未结 6 1460
臣服心动
臣服心动 2020-12-01 10:14

I need a way to upload a file and POST it into php page...

My php page is:



        
6条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-01 10:34

    All above answers are 100% correct. You can also use plain sockets, in which case your method would look like this:

            // Compose the request header
            StringBuffer buf = new StringBuffer();
            buf.append("POST ");
            buf.append(uploader.getUploadAction());
            buf.append(" HTTP/1.1\r\n");
            buf.append("Content-Type: multipart/form-data; boundary=");
            buf.append(boundary);
            buf.append("\r\n");
            buf.append("Host: ");
            buf.append(uploader.getUploadHost());
            buf.append(':');
            buf.append(uploader.getUploadPort());
            buf.append("\r\n");
            buf.append("Connection: close\r\n");
            buf.append("Cache-Control: no-cache\r\n");
    
            // Add cookies
            List cookies = uploader.getCookies();
            if (!cookies.isEmpty())
                {
                    buf.append("Cookie: ");
                    for (Iterator iterator = cookies.iterator(); iterator.hasNext(); )
                        {
                            Parameter parameter = (Parameter)iterator.next();
    
                            buf.append(parameter.getName());
                            buf.append('=');
                            buf.append(parameter.getValue());
    
                            if (iterator.hasNext())
                                buf.append("; ");
                        }
    
                    buf.append("\r\n");
                }
    
            buf.append("Content-Length: ");
    
            // Request body
            StringBuffer body = new StringBuffer();
            List fields = uploader.getFields();
            for (Iterator iterator = fields.iterator(); iterator.hasNext();)
                {
    
                    Parameter parameter = (Parameter) iterator.next();
    
                    body.append("--");
                    body.append(boundary);
                    body.append("\r\n");
                    body.append("Content-Disposition: form-data; name=\"");
                    body.append(parameter.getName());
                    body.append("\"\r\n\r\n");
                    body.append(parameter.getValue());
                    body.append("\r\n");
                }
    
            body.append("--");
            body.append(boundary);
            body.append("\r\n");
            body.append("Content-Disposition: form-data; name=\"");
            body.append(uploader.getImageFieldName());
            body.append("\"; filename=\"");
            body.append(file.getName());
            body.append("\"\r\n");
            body.append("Content-Type: image/pjpeg\r\n\r\n");
    
            String boundary = "WHATEVERYOURDEARHEARTDESIRES";
            String lastBoundary = "\r\n--" + boundary + "--\r\n";
            long length = file.length() + (long) lastBoundary.length() + (long) body.length();
            long total = buf.length() + body.length();
    
            buf.append(length);
            buf.append("\r\n\r\n");
    
            // Upload here
            InetAddress address = InetAddress.getByName(uploader.getUploadHost());
            Socket socket = new Socket(address, uploader.getUploadPort());
            try
                {
                    socket.setSoTimeout(60 * 1000);
                    uploadStarted(length);
    
                    PrintStream out = new PrintStream(new BufferedOutputStream(socket.getOutputStream()));
                    out.print(buf);
                    out.print(body);
    
                    // Send the file
                    byte[] bytes = new byte[1024 * 65];
                    int size;
                    InputStream in = new BufferedInputStream(new FileInputStream(file));
                    try
                        {
                            while ((size = in.read(bytes)) > 0)
                                {
                                    total += size;
                                    out.write(bytes, 0, size);
                                    transferred(total);
                                }
                        }
                    finally
                        {
                            in.close();
                        }
    
                    out.print(lastBoundary);
                    out.flush();
    
                    // Read the response
                    BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    while (reader.readLine() != null);
                }
            finally
                {
                    socket.close();
                }
    

提交回复
热议问题