Код для загрузки видео с Android на PHP - PullRequest
1 голос
/ 09 февраля 2011

Я пытаюсь загрузить видео из кода Android в код своего веб-сервера PHP, но не могу добиться успеха.Я ссылаюсь на следующую ссылку , чтобы выполнить задачу загрузки, но я получаю следующий ответ в своем коде Android, но не могу найти файл на сервере PHP.

Ответ Android

DEBUG/ServerCode(29484): 200
DEBUG/serverResponseMessage(29484): OK

Я проверил много вещей, таких как установка значений в php.ini файлах.Хотя я могу загружать изображения из кода Android на сервер, поскольку из Android я отправляю 64-битную кодированную ByteArray, и в php есть готовая функция, которая может создавать изображения из кодированных ByteArray s.

Но этот код также не работает в случае любого другого файла, имеющего тип, отличный от изображения.

Пожалуйста, наставь меня, если кто-нибудь из вас делал что-то подобное раньше.

Код PHP, который я использую:

<?php

    $target_path  = "./upload/";

    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']);

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path))
    {
        echo "The file ".basename( $_FILES['uploadedfile']['name'])." has been uploaded";
    } 
    else
    {
        echo "There was an error uploading the file, please try again!";
    }
?>

Код Android, который я использую:

public void videoUpload()
{
    HttpURLConnection connection = null;
    DataOutputStream outputStream = null;
    DataInputStream inputStream = null;


    String pathToOurFile = "/sdcard/video-2010-03-07-15-40-57.3gp";
    String urlServer = "http://10.0.0.15/sampleWeb/handle_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);

    // Enable POST method
    connection.setRequestMethod("POST");

    connection.setRequestProperty("Connection", "Keep-Alive");
    connection.setRequestProperty("Content-Type", "multipart/form-data;boundary");

    outputStream = new DataOutputStream( connection.getOutputStream() );
    outputStream.writeBytes(twoHyphens + boundary + lineEnd);
    outputStream.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + pathToOurFile );
    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();
     Log.d("ServerCode",""+serverResponseCode);
     Log.d("serverResponseMessage",""+serverResponseMessage);
    fileInputStream.close();
    outputStream.flush();
    outputStream.close();
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

Ответы [ 2 ]

2 голосов
/ 09 февраля 2011

Моя ява немного вьющаяся, но ....

Похоже, что connection.getResponseCode возвращает только код состояния HTTP, а connection.getResponseMessage возвращает только сообщение о статусе HTTP - но вы PHP ничего не делаете для манипулирования этими значениями. Вы можете попробовать:

$target_path  = "./upload/";
$src = $_FILES['uploadedfile']['name'];

$target_path .= basename($src);

if(file_exists($src) 
        && 
        && move_uploaded_file($src, $target_path)
   ) {
    echo "The file ".basename( $_FILES['uploadedfile']['name'])." has been uploaded";
} else {
    header("Server Error", true, 503);
    echo "There was an error uploading the file, please try again!";
    $msg = "src size ? " 
       . filesize($src) . "\n dest dir writable ?"
       . is_writeable(dirname($target_path)) ? "Y\n" : "N\n"
       . "FILES contains :\n";
       . var_export($_FILES,true);
    // now write $msg somwhere you can read it
}

Это поможет сузить то, что пошло не так

1 голос
/ 11 апреля 2013
private String mString;
private Uri image_uri;  
private String response;    
private HttpURLConnection conn = null;
private DataOutputStream dos = null;
private String lineEnd = "\r\n";
private String twoHyphens = "--";
private String boundary = "*****";
private int bytesRead, bytesAvailable, bufferSize;
private byte[] buffer;
private String url_for_image_upload = "your_web_api_put_here";
private int maxBufferSize = 1 * 1024 * 1024;

// затем вызываем эти два метода на слушателе кнопки onclick

mString = getRealPathFromURI (image_uri);

ImageUpload ();

// напишите эти методы здесь

private void ImageUpload() {

    Toast.makeText(getApplicationContext(),
            "Please Wait while uploading Image", Toast.LENGTH_SHORT).show();

    try {
        FileInputStream fileInputStream = new FileInputStream(new File(mString));
        URL url = new URL(url_for_image_upload);

        conn = (HttpURLConnection) url.openConnection();
        conn.setDoInput(true);

        conn.setDoOutput(true);

        conn.setUseCaches(false);

        conn.setRequestMethod("POST");
        conn.setRequestProperty("Connection", "Keep-Alive");
        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=\"img_name\";filename=\"img_name"
                + "\"" + lineEnd);
        dos.writeBytes(lineEnd);
        bytesAvailable = fileInputStream.available();
        bufferSize = Math.min(bytesAvailable, maxBufferSize);
        buffer = new byte[bufferSize];
        bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        while (bytesRead > 0) {
            dos.write(buffer, 0, bufferSize);
            bytesAvailable = fileInputStream.available();
            bufferSize = Math.min(bytesAvailable, maxBufferSize);
            bytesRead = fileInputStream.read(buffer, 0, bufferSize);
        }
        dos.writeBytes(lineEnd);
        dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
        BufferedReader in = new BufferedReader(new InputStreamReader(
                conn.getInputStream()));
        Log.d("BuffrerReader", "" + in);

        if (in != null) {
            response = convertStreamToString(in);
            Log.e("FINAL_RESPONSE-LENGTH",""+response.length());
            Log.e("FINAL_RESPONSE", response);
        }

        fileInputStream.close();
        dos.flush();
        dos.close();

        if (response.startsWith("0")) {
            Toast.makeText(getApplicationContext(),
                    "Image Uploaded not successfully", Toast.LENGTH_SHORT)
                    .show();
        } else {
            Toast.makeText(getApplicationContext(),
                    "Image Uploaded successfully", Toast.LENGTH_SHORT)
                    .show();

        }

    } catch (MalformedURLException ex) {
        Log.e("Image upload", "error: " + ex.getMessage(), ex);
    } catch (IOException ioe) {
        Log.e("Image upload", "error: " + ioe.getMessage(), ioe);
    }

}

public String getRealPathFromURI(Uri contentUri) {
    String[] proj = { MediaColumns.DATA };
    @SuppressWarnings("deprecation")
    Cursor cursor = managedQuery(contentUri, proj, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaColumns.DATA);
    cursor.moveToFirst();

    mString = cursor.getString(column_index);

    return mString;

}

public static String convertStreamToString(BufferedReader is)
        throws IOException {
    if (is != null) {
        StringBuilder sb = new StringBuilder();
        String line;
        try {

            while ((line = is.readLine()) != null) {
                sb.append(line).append("");
            }
        } finally {
            is.close();
        }
        return sb.toString();
    } else {
        return "";
    }
}
...