从Android上传多个图像在php服务器上
帮助这个特定的服务器端php代码我没有任何关于php的知识,我必须从android上传三个图像到这个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!";
}
}
?>
的Java:
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是正确的。
在您的设备上使用带有MultipartEntity
数据类型的HTTP POST请求。更多here
编辑
实例从我的链接:
您必须下载额外的库来获得MultipartEntity
运行!
1)从http://james.apache.org/download.cgi#Apache_Mime4J下载httpcomponents-client-4.1.zip并将apache-mime4j-0.6.1.jar添加到您的项目中。
2)从http://hc.apache.org/downloads.cgi下载httpcomponents-client-4.1-bin.zip并将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;
}
}
我将所有三个图像转换为byteArray,然后将其添加到列表中。那之后我该怎么做?或者我走错了路? – user1160020
in1 = new FileInputStream(“/ sdcard/1.jpg”); 位图bitmapOrg1 = BitmapFactory.decodeStream(in1); ByteArrayOutputStream bao1 = new ByteArrayOutputStream(); bitmapOrg1.compress(Bitmap.CompressFormat.JPEG,90,bao1); \t byte [] imagearray1 = bao1.toByteArray(); String ba1 = Base64.encode(imagearray1); 这是我为所有三个图像做的 – user1160020
看我的例子。通过这种方法,MultipartEntity将为您做所有事情。您只需从文件创建FileBody(并从图像创建文件)。 –
首先可以优化到以下几点:
$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!';
}
}
这些图像后我必须通过HTTP上传,怎么你做你的上传? (因为你提到Java) – greut
我的意思是Android应用程序中所需的Java Activity代码。我已经厌倦了使用http和mulitpart上传,但没有用。这可能会发生,因为我可能不知道关于PHP的代码。 – user1160020
向我们显示代码。 – greut