我創建了一些代碼來處理從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 %%)。
那麼一首歌比莉珍邁克爾 - 傑克遜描述「最愛」應該有
music/Michael Jackson/Billie%20Jean%%D%%favorite.mp3
但是我得到的路徑,方法是:
music/0Billie%%D%%=
目錄對於藝術家沒有創建,在標題之前有一個奇怪的0(它只包含第一個單詞),並且描述不顯示。
我真的不知道我哪裏錯了,誰能給我一些見解?謝謝。
你的問題很難理解。請更新您的問題,以添加1)Java中的整個URL(包括編碼參數),2)PHP檢索的原始參數和3)路徑的'realpath()'的調試打印。 – BalusC 2011-04-04 00:05:23
它看起來像一個編碼問題。由Java組裝的URL可能缺少urlencoding。它也可能包含一個'\ 0' NUL字節,這會導致文件名被截斷。無論如何在$ _GET變量上應用輸入過濾('\ w +'regex)。 – mario 2011-04-04 00:07:43
我討厭聽起來像一個傻瓜,但我很新,而且我真的不知道當你說'realpath()'和'(\ w正則表達式)'時,你的任何一個意見都是要求的。編碼的事情可能是問題,我會包括我從java完整的上傳方法。 – JMRboosties 2011-04-04 00:18:26