文件上传系统工作不正常......有人可以看看这段代码吗?

时间:2011-04-03 23:52:06

标签: java php file-upload

我创建了一些代码来处理从java客户端到php服务器的基本文件上传,但我在命名和目录创建方面遇到了一些问题。以下是代码的重要部分:

我用来上传文件的方法:

public static void uploadWithInfo(Uri uri, String title, String artist, String description) {
    try {
        String path = uri.getPath();
        File file = new File(path);
        URL url = new URL("http://**********/upload.php?title="+title+"&artist="+artist+"&description="+description);
        HttpURLConnection connection = (HttpURLConnection)url.openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("POST");
        OutputStream os = connection.getOutputStream();

        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
        int totalbytes = bis.available();

        for(int i = 0; i < totalbytes; i++) {
            os.write(bis.read());
        }
        os.close();

        BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
        String serverResponse = "";
        String response = "";

        while((response = reader.readLine()) != null) {
            serverResponse = serverResponse + response;
        }
        reader.close();
        bis.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

它只是上传一个音频文件。如有必要,用户输入艺术家,标题和非常简短的描述。实际的文件上传得很好,所以我认为不再需要java了。这是php端的代码:

<?php

$uploadBase = "music/";
$uploadFolder = $_GET['artist']+"/";
$uploadFileName = $_GET['title'];
$uploadFileDescription = $_GET['description'];
$uploadPath = $uploadBase.$uploadFolder.$uploadFileName."%%D%%=".$uploadFileDescription.".mp3";

if(!is_dir($uploadBase)) {
    mkdir($uploadBase);
}

if(!is_dir($uploadFolder)) {
    mkdir($uploadFolder);
}

$incomingData = file_get_contents('php://input');

if(!$incomingData) {
    die("No data.");
}

$fh = fopen($uploadPath, 'w') or die("Error opening path.");
fwrite($fh, $incomingData) or die("Error writing file.");
fclose($fh) or die("Error closing shop.");

echo "Success!";

?>

因此,我获得了标题,艺术家和描述的所有输入值。然后我创建2个目录,如果它们尚不存在:一个用于音乐,另一个用于艺术家的上传器输入。然后我创建一个基(音乐)/文件夹(艺术家)/文件名(标题)“代码让我解析描述”的路径(%% D %%)。mp3。

所以迈克尔·杰克逊的一首歌Billie Jean以及“喜欢”的描述应该有一条

的路径

music/Michael Jackson/Billie%20Jean%%D%%favorite.mp3

然而,我得到的是:

music/0Billie%%D%%=

未创建艺术家的目录,标题前面有一个奇怪的0(仅包含第一个单词),并且描述没有显示。

我真的不知道哪里出错了,有人能给我一些见解吗?谢谢。

2 个答案:

答案 0 :(得分:0)

您的InputStream.available()方法没有达到预期效果。请改用文件大小。

编辑:请改为使用多部分上传。 Apache HttpClient支持它,谷歌为examples

答案 1 :(得分:0)

原来这是一个与一些相关的PHP代码的愚蠢错误。很抱歉给大家带来麻烦。