如何将二进制文件从android存储到mysql

时间:2012-11-26 16:16:31

标签: php android mysql binary blob

我想将已发送的文件从android存储到mysql,但是blob字段为空。

这是我在php中的代码

<?php

    $target_path  = "./";
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']);
    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {

    $fileName = $_FILES['uploadedfile']['name'];
    $tmpName = $_FILES['uploadedfile']['tmp_name'];
    $fileSize = $_FILES['uploadedfile']['size']; // file size
    $data = file_get_contents($_FILES['uploadedfile']['tmp_name']);
    mysql_connect('localhost','root','');
    @mysql_select_db('client') or die("<b>Unable to specified database</b>");


    $query = "INSERT INTO files            (Username,f_id,PathFilename,DateSent,File,Filesize)
    VALUES ('d',' ','$fileName',' ',' $data','$fileSize')";
    mysql_query($query) or die('Error, query failed');
    }
    else
    {
   echo  "Weak here";
    }

?>

这是我在android中的代码

        Log.e(Tag, "Inside second Method");

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

        // open a URL connection to the Servlet

        URL url = new URL(urlString);


        // 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("Connection", "Keep-Alive");

        conn.setRequestProperty("Content-Type",
                "multipart/form-data;boundary=" + boundary);

        DataOutputStream dos = new DataOutputStream(conn.getOutputStream());

        dos.writeBytes(twoHyphens + boundary + lineEnd);
        dos .writeBytes("Content-Disposition: post-data; name=uploadedfile;filename="
                        + exsistingFileName + "" + lineEnd); // ito ung file

        dos.writeBytes(lineEnd);

        Log.e(Tag, "Headers are written");

        // create a buffer of maximum size

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

        // read file and write it into form...

        int bytesRead = fileInputStream.read(buffer, 0, bytesAvailable);

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

        // send multipart form data necesssary after file data...

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

        // close streams
        Log.e(Tag, "File is written");
        fileInputStream.close();
        dos.flush();
        dos.close();
    } catch (MalformedURLException ex) {
        Log.e(Tag, "error: " + ex.getMessage(), ex);
    }
    catch(Exception e){
    dialog.dismiss();
    System.out.println("Exception : " + e.getMessage());
    }

    try {
        BufferedReader rd = new BufferedReader(new InputStreamReader(conn
                .getInputStream()));
        String line;
        while ((line = rd.readLine()) != null) {
            Log.e("Dialoge Box", "Message: " + line);
        }
        rd.close();

    } catch (IOException ioex) {
        Log.e("MediaPlayer", "error: " + ioex.getMessage(), ioex);
    }
}

成功上传了android上传的文件,并将文件的名称和大小插入到数据库中 但是作为文件(字段)的blob字段显示0B ..请帮助我

1 个答案:

答案 0 :(得分:1)

尝试:

$data = mysql_real_escape_string(file_get_contents($_FILES['uploadedfile']['tmp_name']));

也许这会有所帮助