Android sending image to Server via MultipartEntity - setting Content-type?

后端 未结 5 685
北恋
北恋 2020-12-17 22:18

I\'ve read many many posts about sending an image to the server from an Android app and Content-type-wise, they are divided in three categories:

a) they dont set the

相关标签:
5条回答
  • 2020-12-17 22:52

    If someone just cannot figure out what is going on with headers, take a look at this article http://develop-for-android.blogspot.com/2014/01/using-volley-in-your-application.html It just saved me the day.

    0 讨论(0)
  • 2020-12-17 22:55

    Read the source of the file http. Check this solution:

    1. Call new MultipartEntity:

      MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE, null, Charset.forName("UTF-8"));

    2. Add request header

      heads.put("Content-Type", "image/png;charset=utf-8");

    0 讨论(0)
  • 2020-12-17 22:56

    If you are using a library, you need to put it into /libs folder.

    EDIT:

    download httpmime, httpcore and httpclient library from http://hc.apache.org/downloads.cgi

    0 讨论(0)
  • 2020-12-17 23:12

    Use this code to upload image file

    HttpClient client = new DefaultHttpClient();
    HttpPost postMethod = new HttpPost("http://localhost/Upload/index.php");
    File file = new File(filePath);
    MultipartEntity entity = new MultipartEntity();
    FileBody contentFile = new FileBody(file);
    entity.addPart("userfile",contentFile);
    StringBody contentString = new StringBody("This is contentString");
    entity.addPart("contentString",contentString);
    
    postMethod.setEntity(entity);
    client.execute(postMethod);
    

    and in PHP use this code to receive

    $uploads_dir = '/Library/WebServer/Documents/Upload/upload/'.$_FILES['userfile']['name'];
    if(is_uploaded_file($_FILES['userfile']['tmp_name'])) {
        echo $_POST["contentString"]."\n";
        echo  "File path = ".$uploads_dir;
        move_uploaded_file ($_FILES['userfile'] ['tmp_name'], $uploads_dir);
    } else {
        echo "\n Upload Error";
        echo "filename '". $_FILES['userfile']['tmp_name'] . "'.";
        print_r($_FILES);
    }
    
    0 讨论(0)
  • 2020-12-17 23:14

    Use this code:--

    public class HttpMultipartUpload {
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "AaB03x87yxdkjnxvi7";
    
        public String upload(URL url, File file, String fileParameterName,
                HashMap<String, String> parameters) throws IOException {
            HttpURLConnection conn = null;
            DataOutputStream dos = null;
            DataInputStream dis = null;
            FileInputStream fileInputStream = null;
    
            byte[] buffer;
            int maxBufferSize = 20 * 1024;
            try {
                // ------------------ CLIENT REQUEST
                fileInputStream = new FileInputStream(file);
    
                // open a URL connection to the Servlet
                // Open a HTTP connection to the URL
                conn = (HttpURLConnection) url.openConnection();
                // Allow Inputs
                conn.setDoInput(true);
                // Allow Outputs
                conn.setDoOutput(true);
                // Don't use a cached copy.
                conn.setUseCaches(false);
                // Use a post method.
                conn.setRequestMethod("POST");
                conn.setRequestProperty("Content-Type",
                        "multipart/form-data;boundary=" + boundary);
    
                dos = new DataOutputStream(conn.getOutputStream());
    
                dos.writeBytes(twoHyphens + boundary + lineEnd);
                dos.writeBytes("Content-Disposition: form-data; name=\""
                        + fileParameterName + "\"; filename=\"" + mFileName
                        + ".jpg" + "\"" + lineEnd);
                dos.writeBytes("Content-Type:image/jpg" + lineEnd);
                dos.writeBytes(lineEnd);
    
                // create a buffer of maximum size
                buffer = new byte[Math.min((int) file.length(), maxBufferSize)];
                int length;
                // read file and write it into form...
                while ((length = fileInputStream.read(buffer)) != -1) {
                    dos.write(buffer, 0, length);
                }
    
                for (String name : parameters.keySet()) {
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(twoHyphens + boundary + lineEnd);
                    dos.writeBytes("Content-Disposition: form-data; name=\""
                            + name + "\"" + lineEnd);
                    dos.writeBytes(lineEnd);
                    dos.writeBytes(parameters.get(name));
                }
    
                // send multipart form data necessary after file data...
                dos.writeBytes(lineEnd);
                dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
                dos.flush();
            } finally {
                if (fileInputStream != null)
                    fileInputStream.close();
                if (dos != null)
                    dos.close();
            }
    
            // ------------------ read the SERVER RESPONSE
            try {
                dis = new DataInputStream(conn.getInputStream());
                StringBuilder response = new StringBuilder();
    
                String line;
                while ((line = dis.readLine()) != null) {
                    response.append(line).append('\n');
                }
    
                System.out.println("Upload file responce:"
                        + response.toString());
                return response.toString();
            } finally {
                if (dis != null)
                    dis.close();
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题