将图像从Android上传到PHP

时间:2014-07-05 06:31:04

标签: php android upload

我想用android远程文件从android上传任何图像文件到主机。 这是我的PHP代码:

<?php
$uploaddir = 'question_images/';
$ran = rand () ;

$file = basename($_FILES['userfile']['name']);
$uploadfile = $uploaddir .$ran.$file;

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
        echo "~/question_images/{$uploadfile}";
}
?>

您可以在我的代码中看到上传成功返回文件名和带有echo命令的文件路径。

这是我的android代码:

private String UploadImage(String FilePath) {
    String UploadPath = "";
    String fileName = FilePath;
    HttpURLConnection conn = null;
    DataOutputStream dos = null;
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "*****";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024;
    File sourceFile = new File(FilePath);

    if (!sourceFile.isFile()) {

        runOnUiThread(new Runnable() {
            public void run() {

            }
        });
    } else {
        try {

            // open a URL connection to the Servlet
            FileInputStream fileInputStream = new FileInputStream(
                    sourceFile);
            URL url = new URL(upLoadServerUri);

            // Open a HTTP connection to the URL
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true); // Allow Inputs
            conn.setDoOutput(true); // Allow Outputs
            conn.setUseCaches(false); // Don't use a Cached Copy
            conn.setRequestMethod("POST");
            conn.setRequestProperty("Connection", "Keep-Alive");
            conn.setRequestProperty("ENCTYPE", "multipart/form-data");
            conn.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            conn.setRequestProperty("userfile", fileName);

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

            dos.writeBytes(twoHyphens + boundary + lineEnd);
            dos.writeBytes("Content-Disposition: form-data; name=\"userfile\";filename=\""
                    + fileName + "\"" + lineEnd);

            dos.writeBytes(lineEnd);

            // create a buffer of maximum size
            bytesAvailable = fileInputStream.available();

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

            // read file and write it into form...
            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);

            }

            // send multipart form data necesssary after file data...
            dos.writeBytes(lineEnd);
            dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

            // Responses from the server (code and message)
            serverResponseCode = conn.getResponseCode();
            UploadPath = conn.getResponseMessage();

            if (serverResponseCode == 200) {

                runOnUiThread(new Runnable() {
                    public void run() {

                    }
                });
            }

            // close the streams //
            fileInputStream.close();
            dos.flush();
            dos.close();
            return UploadPath;

        } catch (MalformedURLException ex) {

            ex.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {

                }
            });
            return UploadPath;

        } catch (Exception e) {

            e.printStackTrace();

            runOnUiThread(new Runnable() {
                public void run() {

                }
            });
            return UploadPath;
        }

    } // End else block
    return UploadPath;
}

每件事都可以,但我想从php echo命令获取文件路径。 (php保存文件,随机名称为make unique files)。

请帮帮我

1 个答案:

答案 0 :(得分:0)

如果你的配方更好,你会得到更多的点反应。 您希望从响应中读取脚本回显的路径。你没有说你已经尝试过使用UploadPath并得到了一个愚蠢的消息。请下次再来。

UploadPath = conn.getResponseMessage();

但那不行。

您必须在字符串中从php脚本打开DataInputStreamread回声。然后,从响应中,您可以解析脚本保存文件的路径。

而且:如果出现错误,请让你的脚本回复一些内容。