Android電子設備的不斷普及,讓移動應用程序的開發日益增加。與此同時,服務端開發人員也越來越關注如何對Android設備進行文件上傳。在這篇文章中,我們將詳細介紹如何使用PHP編寫Android文件上傳的服務端接口。
對于Android設備而言,由于Java是其主要開發語言,因此,我們可以依靠類似于HttpClient的HTTP客戶端發送POST請求,來傳送本地文件并處理上傳的文件。為了保證上傳成功并向服務端發送正確的數據格式,我們可以采用MultiPartUtility類,這個類可以讓我們處理數據并將它們編碼為multipart/form-data。在下文中,我將仔細講解這些問題。
PHP處理圖片上傳
我們來考慮一個情況,假設我們需要上傳一張用戶頭像圖片,其文件名為head.png。我們可以將這張圖片存儲在Android應用程序的本地存儲路徑 /sdcard/Pictures/head.png 上。接下來,我們將介紹如何采用PHP編寫服務端接口,接收Android客戶端上傳的圖片數據。
服務端代碼:
$target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION)); if ($imageFileType == "jpg" || $imageFileType == "png" || $imageFileType == "jpeg" || $imageFileType == "gif") { if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) { echo "The file \"" . basename($_FILES["fileToUpload"]["name"]) . "\" has been uploaded."; } else { echo "Sorry, there was an error uploading your file."; } } else { echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; }在代碼中,我們可以看到我們的數據處理就是簡單地將上傳的圖片數據移動到指定的目錄中存儲。我們也可以添加一些額外的處理來猜測上傳的文件類型并檢查傳輸文件是否為空等,但基本的思想就是這樣。 客戶端代碼:
private String uploadFile(String url, String filePath) { File file = new File(filePath); String responseString = null; try { HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(url); MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); entityBuilder.addBinaryBody("fileToUpload", file, ContentType.create("image/jpeg"), file.getName()); httppost.setEntity(entityBuilder.build()); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); if (entity != null) { InputStream instream = entity.getContent(); responseString = convertStreamToString(instream); instream.close(); } } catch (Exception e) { e.printStackTrace(); } return responseString; }在客戶端的代碼中,我們首先需要通過HttpClient類創建一個Http客戶端以向服務端發送POST請求,請求的文件路徑為本地文件存儲路徑,此處即為 filePath。HttpClient使用方式與其他Http客戶端類似,具體用法此處不做贅述。 同時,我們還需要用MultipartEntityBuilder創建一個multipart/form-data類型的實例,并向其中添加BinaryBody。這里,我們只將上傳文件的數據處理為二進制數據,其他的服務端應用稍微不同,我們需要注意最好還要對文件進行加密處理。在處理上傳文件后,我們需要將它們作為參數設置HttpPost對象的實例,并發送到服務端,以完成文件上傳。完成后,我們可以從服務端響應中獲取到返回的數據并進行進一步處理。一般而言,服務端返回的數據格式可以是JSON序列化的形式。 總結: 在這篇文章中,我們了解到了如何在Android設備上上傳文件數據,并向服務端發送POST請求。同時,我們還介紹了PHP編寫面向Android數據上傳的服務端資源的基本操作。希望能夠對大家有所幫助。