从android设备发送文件到服务器?

时间:2014-02-13 12:47:50

标签: php android file-upload

如何将所有文件从SD卡发送到服务器我可以通过此方式将文件从设备推送到服务器 代码:

public void btnclick(View v) {

        String pathToOurFile = "/mnt/sdcard/" + "q.3gp";
        String urlServer = "http://www.google.com/upload.php";
        String lineEnd = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";
        int bytesRead, bytesAvailable, bufferSize;
        byte[] buffer;
        int maxBufferSize = 1 * 1024 * 1024;

        try {

            FileInputStream fileInputStream = new FileInputStream(new File(
                    pathToOurFile));

            URL url = new URL(urlServer);
            connection = (HttpURLConnection) url.openConnection();

            // Allow Inputs & Outputs
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.setUseCaches(false);
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Connection", "Keep-Alive");
            connection.setRequestProperty("ENCTYPE", "multipart/form-data");
            connection.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            connection.setRequestProperty("uploaded_file", "gopivideo");
            outputStream = new DataOutputStream(connection.getOutputStream());
            outputStream.writeBytes(twoHyphens + boundary + lineEnd);
            outputStream
                    .writeBytes("Content-Disposition: form-data; name=\"sample\";filename=\""
                            + pathToOurFile + "\"" + lineEnd);
            outputStream.writeBytes(lineEnd);

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

            // Read file
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);

            while (bytesRead > 0) {
                outputStream.write(buffer, 0, bufferSize);
                bytesAvailable = fileInputStream.available();
                bufferSize = Math.min(bytesAvailable, maxBufferSize);
                bytesRead = fileInputStream.read(buffer, 0, bufferSize);
            }

            outputStream.writeBytes(lineEnd);
            outputStream.writeBytes(twoHyphens + boundary + twoHyphens
                    + lineEnd);

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

            Toast.makeText(getApplicationContext(),
                    serverResponseCode + "," + serverResponseMessage,
                    Toast.LENGTH_LONG).show();

            fileInputStream.close();
            outputStream.flush();
            outputStream.close();
        } catch (Exception ex) {
            // Exception handling
        }
    }
}

这对于通过单次推送将任何类型的文件上传到服务器非常有用 但是需要的是循环sdcard中的所有文件并逐个发送。 谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用Multipart post请求执行此操作:(这样,您不需要创建json)

   HttpClient client = new DefaultHttpClient();
    HttpPost post = new HttpPost(serverURL);
    MultipartEntity postEntity = new MultipartEntity();
    File file = new File("Your File path on SD card");
    postEntity.addPart("fileupload", new FileBody(file, "image/jpeg"));
    postEntity.addPart("loginKey", new StringBody(""+loginKey));
    postEntity.addPart("message", new StringBody(message));
    postEntity.addPart("token", new StringBody(token));
    post.setEntity(postEntity);
    response = client.execute(post);

并添加Mime4

相关问题