Справка для этого конкретного php-кода на стороне сервера. У меня нет знаний о php, и я должен загрузить три изображения с android на эту php-страницу.
Я пробовал много методов и искал его, но ни один учебник или что-то не помогло мне, мой код Android работает правильно. DNS также настроен, но изображения не отображаются на стороне сервера. Пожалуйста, помогите мне с java-кодом.
PHP:
<?php if ($_FILES["file1"]["error"] > 0) { header("HTTP/1.1 400 Bad Request"); echo "Error: " . $_FILES["file1"]["error"] . "<br />"; } else if ($_FILES["file2"]["error"] > 0) { header("HTTP/1.1 400 Bad Request"); echo "Error: " . $_FILES["file1"]["error"] . "<br />"; } else if ($_FILES["file3"]["error"] > 0) { header("HTTP/1.1 400 Bad Request"); echo "Error: " . $_FILES["file1"]["error"] . "<br />"; } else { if ($_FILES["file1"]["error"] > 0) { echo "Error: " . $_FILES["file1"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file1"]["name"] . "<br />"; echo "Type: " . $_FILES["file1"]["type"] . "<br />"; echo "Size: " . ($_FILES["file1"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["file1"]["tmp_name"]. "<br />"; } //$target_path = "uploads/"; $target_path = "elp/pendingimages/"; $target_path = $target_path . basename( $_FILES['file1']['name']); if(move_uploaded_file($_FILES['file1']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['file1']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } if ($_FILES["file2"]["error"] > 0) { echo "Error: " . $_FILES["file2"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file2"]["name"] . "<br />"; echo "Type: " . $_FILES["file2"]["type"] . "<br />"; echo "Size: " . ($_FILES["file2"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["file2"]["tmp_name"]. "<br />"; } //$target_path = "uploads/"; $target_path = "elp/pendingimages/"; $target_path = $target_path . basename( $_FILES['file2']['name']); if(move_uploaded_file($_FILES['file2']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['file2']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } if ($_FILES["file3"]["error"] > 0) { echo "Error: " . $_FILES["file3"]["error"] . "<br />"; } else { echo "Upload: " . $_FILES["file3"]["name"] . "<br />"; echo "Type: " . $_FILES["file3"]["type"] . "<br />"; echo "Size: " . ($_FILES["file3"]["size"] / 1024) . " Kb<br />"; echo "Stored in: " . $_FILES["file3"]["tmp_name"]. "<br />"; } //$target_path = "uploads/"; $target_path = "elp/pendingimages/"; $target_path = $target_path . basename( $_FILES['file3']['name']); if(move_uploaded_file($_FILES['file3']['tmp_name'], $target_path)) { echo "The file ". basename( $_FILES['file3']['name']). " has been uploaded"; } else{ echo "There was an error uploading the file, please try again!"; } } ?>
Ява:
public class TryprojectActivity extends Activity { InputStream is; int pic_count = 0; Bitmap bitmap=null; FileInputStream in1,in2,in3; BufferedInputStream buf; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); try { in1 = new FileInputStream("/sdcard/1.jpg"); } catch (FileNotFoundException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } try { in2 = new FileInputStream("/sdcard/2.jpg"); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } try { in3 = new FileInputStream("/sdcard/3.jpg"); } catch (FileNotFoundException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Bitmap bitmapOrg1 = BitmapFactory.decodeStream(in1); ByteArrayOutputStream bao1 = new ByteArrayOutputStream(); bitmapOrg1.compress(Bitmap.CompressFormat.JPEG, 90, bao1); byte [] imagearray1 = bao1.toByteArray(); String ba1=Base64.encode(imagearray1); Bitmap bitmapOrg2 = BitmapFactory.decodeStream(in2); ByteArrayOutputStream bao2 = new ByteArrayOutputStream(); bitmapOrg2.compress(Bitmap.CompressFormat.JPEG, 90, bao2); byte [] imagearray2 = bao2.toByteArray(); String ba2=Base64.encode(imagearray2); Bitmap bitmapOrg3 = BitmapFactory.decodeStream(in3); ByteArrayOutputStream bao3 = new ByteArrayOutputStream(); bitmapOrg3.compress(Bitmap.CompressFormat.JPEG, 90, bao3); byte [] imagearray3 = bao3.toByteArray(); String ba3=Base64.encode(imagearray3); List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(3); nameValuePairs.add(new BasicNameValuePair("image1",ba1)); nameValuePairs.add(new BasicNameValuePair("image2",ba2)); nameValuePairs.add(new BasicNameValuePair("image3",ba3)); try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost("http://helpdesk.cispl.com/upload_file.php"); UrlEncodedFormEntity obj = new UrlEncodedFormEntity(nameValuePairs); obj.setChunked(true); httppost.setEntity(obj); HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); //is = entity.getContent(); httpclient.getConnectionManager().shutdown(); } catch(Exception e){ //CommonFunctions.writeLOG(ctx.getClass().toString(), e.toString()); //CommonFunctions.showToast(ctx, "Unable to post captured image file: " + //e.toString()); } }
Похоже, ваш PHP правильный.
На вашем устройстве используйте HTTP POST-запрос с типом данных MultipartEntity
. Подробнее здесь
РЕДАКТИРОВАТЬ
Пример из моей ссылки:
Вам нужно будет загрузить дополнительные библиотеки, чтобы запустить MultipartEntity
!
1) Загрузите httpcomponents-client-4.1.zip из http://james.apache.org/download.cgi#Apache_Mime4J и добавьте apache-mime4j-0.6.1.jar в свой проект.
2) Загрузите httpcomponents-client-4.1-bin.zip из http://hc.apache.org/downloads.cgi и добавьте httpclient-4.1.jar, httpcore-4.1.jar и httpmime-4.1.jar в свой проект.
3) Используйте приведенный ниже примерный код.
private DefaultHttpClient mHttpClient; public ServerCommunication() { HttpParams params = new BasicHttpParams(); params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); mHttpClient = new DefaultHttpClient(params); } public void uploadUserPhoto(File image1, File image2, File image3) { try { HttpPost httppost = new HttpPost("some url"); MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("Title", new StringBody("Title")); multipartEntity.addPart("Nick", new StringBody("Nick")); multipartEntity.addPart("Email", new StringBody("Email")); multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT)); multipartEntity.addPart("file1", new FileBody(image1)); multipartEntity.addPart("file2", new FileBody(image2)); multipartEntity.addPart("file3", new FileBody(image3)); httppost.setEntity(multipartEntity); mHttpClient.execute(httppost, new PhotoUploadResponseHandler()); } catch (Exception e) { Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e); } } private class PhotoUploadResponseHandler implements ResponseHandler { @Override public Object handleResponse(HttpResponse response) throws ClientProtocolException, IOException { HttpEntity r_entity = response.getEntity(); String responseString = EntityUtils.toString(r_entity); Log.d("UPLOAD", responseString); return null; } }
private DefaultHttpClient mHttpClient; public ServerCommunication() { HttpParams params = new BasicHttpParams(); params.setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1); mHttpClient = new DefaultHttpClient(params); } public void uploadUserPhoto(File image1, File image2, File image3) { try { HttpPost httppost = new HttpPost("some url"); MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE); multipartEntity.addPart("Title", new StringBody("Title")); multipartEntity.addPart("Nick", new StringBody("Nick")); multipartEntity.addPart("Email", new StringBody("Email")); multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT)); multipartEntity.addPart("file1", new FileBody(image1)); multipartEntity.addPart("file2", new FileBody(image2)); multipartEntity.addPart("file3", new FileBody(image3)); httppost.setEntity(multipartEntity); mHttpClient.execute(httppost, new PhotoUploadResponseHandler()); } catch (Exception e) { Log.e(ServerCommunication.class.getName(), e.getLocalizedMessage(), e); } } private class PhotoUploadResponseHandler implements ResponseHandler { @Override public Object handleResponse(HttpResponse response) throws ClientProtocolException, IOException { HttpEntity r_entity = response.getEntity(); String responseString = EntityUtils.toString(r_entity); Log.d("UPLOAD", responseString); return null; } }
Прежде всего, ваш код может быть оптимизирован следующим образом:
$files = array('file1', 'file2', 'file3'); $path = 'elp/pendingimages/'; foreach ($files as $file) { if ($_FILES[$file]['error'] > 0) { echo 'Error: '. $_FILES[$file]['error'] .'<br />'; } else { echo 'Upload: '. $_FILES[$file]['name'] .'<br />'; echo 'Type: '. $_FILES[$file]['type'] .'<br />'; echo 'Size: '. ($_FILES[$file]['size'] / 1024) .' Kb<br />'; echo 'Stored in: '. $_FILES[$file]['tmp_name'] .'<br />'; } $basename = basename($_FILES[$file]['name']); if (move_uploaded_file($_FILES[$file]['tmp_name'], $path . $basename) { echo "The file {$basename} has been uploaded"; } else { echo 'There was an error uploading the file, please try again!'; } }
Если вы используете другое поле для каждого файла, тогда все в порядке.
Затем вы можете увидеть, что массив $ _FILES хранит сам по себе, когда он многократно загружается:
$_FILES = array( ['files'] => array( ['name'] => array( [0] => 'WALL_video.jpg' [1] => 'WALLc.jpg' ) ['type'] => array( [0] => 'image/jpeg' [1] => 'image/jpeg' ) ['tmp_name'] => array( [0] => '/tmp/phpnbKcdM' [1] => '/tmp/phpnrHSN1' ) ['error'] => array( [0] => 0 [1] => 0 ) ['size'] => array( [0] => 885968 [1] => 839713 ) ) )
Следующий код будет работать для вас, если вы используете одно поле с именем, подобным files[]
виде массива файлов.
$target_path = 'elp/pendingimages/'; foreach ($_FILES['files']['name'] as $index => $name) { if ($_FILES['files']['error'][$index] > 0) { echo 'Error: ' . $_FILES['files']['error'][$index] . '<br />'; } else { echo 'Upload: '. $_FILES['files']['name'][$index] .'<br />'; echo 'Type: '. $_FILES['files']['type'][$index] .'<br />'; echo 'Size: '. ($_FILES['files']['size'][$index] / 1024) .' Kb<br />'; echo 'Stored in: '. $_FILES['files']['tmp_name'][$index] .'<br />'; } $path = $target_path . basename($name); if (move_uploaded_file($_FILES['files']['tmp_name'][$index], $path) { echo "The file {$name} has been uploaded"; } else { echo 'There was an error uploading the file, please try again!'; } }
Проверьте мой пост при отправке нескольких изображений на сервер. Нажмите здесь.