上传到远程服务器android

时间:2014-07-17 03:51:40

标签: android image upload

我想将一些图像从图库上传到远程服务器(PHP),它使用的是httpmime-4.1.1.jar,但我遇到了麻烦,我没有任何想法解决它,这是我的源代码和我的错误logcat:

package com.example.uploadimage;

import java.io.BufferedReader;
import java.io.ByteArrayOutputStream;
import java.io.InputStreamReader;
import java.util.Date;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.ByteArrayBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {

    private static final int SELECT_PICTURE = 0;
    private ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(android.R.id.icon);
    }

    public void pickPhoto(View view) {
        //TODO: launch the photo picker
        Intent intent = new Intent();
         intent.setType("image/*");
         intent.setAction(Intent.ACTION_GET_CONTENT);
         startActivityForResult(Intent.createChooser(intent,
         "Select Picture"), SELECT_PICTURE);

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(resultCode == RESULT_OK) {
            Bitmap bitmap = getPath(data.getData());
            imageView.setImageBitmap(bitmap);
        }
    }

    private Bitmap getPath(Uri uri) {

        String[] projection = { MediaStore.Images.Media.DATA };
        Cursor cursor = managedQuery(uri, projection, null, null, null);
        int column_index = cursor
                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String filePath = cursor.getString(column_index);
        cursor.close();
        // Convert file path into bitmap image using below line.
        Bitmap bitmap = BitmapFactory.decodeFile(filePath);

        return bitmap;
    }

    public void uploadPhoto(View view) {
        try {
            executeMultipartPost();
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void executeMultipartPost() throws Exception {

        try {

            ByteArrayOutputStream bos = new ByteArrayOutputStream();

            BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();

            Bitmap bitmap = drawable.getBitmap();

            bitmap.compress(CompressFormat.JPEG, 50, bos);

            byte[] data = bos.toByteArray();

            HttpClient httpClient = new DefaultHttpClient();

            HttpPost postRequest = new HttpPost(

            "http://xxx.xxx.xxx.xxx/dummy/uploadimage.php");

            String fileName = String.format("File_%d.png",new Date().getTime());
            ByteArrayBody bab = new ByteArrayBody(data, fileName);

            // File file= new File("/mnt/sdcard/forest.png");

            // FileBody bin = new FileBody(file);

            MultipartEntity reqEntity = new MultipartEntity(

            HttpMultipartMode.BROWSER_COMPATIBLE);

            reqEntity.addPart("file", bab);

            postRequest.setEntity(reqEntity);
            int timeoutConnection = 60000;
            HttpParams httpParameters = new BasicHttpParams();
            HttpConnectionParams.setConnectionTimeout(httpParameters,
                    timeoutConnection);
            int timeoutSocket = 60000;
            HttpConnectionParams.setSoTimeout(httpParameters, timeoutSocket);
            HttpConnectionParams.setTcpNoDelay(httpParameters, true);

            HttpResponse response = httpClient.execute(postRequest);

            BufferedReader reader = new BufferedReader(new InputStreamReader(

            response.getEntity().getContent(), "UTF-8"));

            String sResponse;

            StringBuilder s = new StringBuilder();

            while ((sResponse = reader.readLine()) != null) {

                s = s.append(sResponse);

            } 
            System.out.println("Response: " + s);

        } catch (Exception e) {

            // handle exception here
            e.printStackTrace(); 
            Log.d("error","aadfa");

        }

    }
}

我的php源代码:

<?php
    $base=$_REQUEST['image'];
    $binary=base64_decode($base);
    header('Content-Type: bitmap; charset=utf-8');
    $file = fopen('uploaded_image.jpg', 'wb');
    fwrite($file, $binary);
    fclose($file);
    //echo 'Image upload complete!!, Please check your php file directory……';
?>

我的logcat错误:

07-17 10:47:09.012: W/System.err(24849): android.os.NetworkOnMainThreadException
07-17 10:47:09.019: W/System.err(24849):    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1118)
07-17 10:47:09.019: W/System.err(24849):    at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
07-17 10:47:09.019: W/System.err(24849):    at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
07-17 10:47:09.019: W/System.err(24849):    at libcore.io.IoBridge.connect(IoBridge.java:112)
07-17 10:47:09.019: W/System.err(24849):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-17 10:47:09.019: W/System.err(24849):    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
07-17 10:47:09.019: W/System.err(24849):    at java.net.Socket.connect(Socket.java:842)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.conn.scheme.PlainSocketFactory.connectSocket(PlainSocketFactory.java:119)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:144)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:164)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:119)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:360)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)
07-17 10:47:09.019: W/System.err(24849):    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)
07-17 10:47:09.019: W/System.err(24849):    at com.example.uploadimage.MainActivity.executeMultipartPost(MainActivity.java:130)
07-17 10:47:09.019: W/System.err(24849):    at com.example.uploadimage.MainActivity.uploadPhoto(MainActivity.java:81)
07-17 10:47:09.019: W/System.err(24849):    at java.lang.reflect.Method.invokeNative(Native Method)
07-17 10:47:09.019: W/System.err(24849):    at java.lang.reflect.Method.invoke(Method.java:511)
07-17 10:47:09.027: W/System.err(24849):    at android.view.View$1.onClick(View.java:3693)
07-17 10:47:09.027: W/System.err(24849):    at android.view.View.performClick(View.java:4222)
07-17 10:47:09.027: W/System.err(24849):    at android.view.View$PerformClick.run(View.java:17273)
07-17 10:47:09.027: W/System.err(24849):    at android.os.Handler.handleCallback(Handler.java:615)
07-17 10:47:09.027: W/System.err(24849):    at android.os.Handler.dispatchMessage(Handler.java:92)
07-17 10:47:09.027: W/System.err(24849):    at android.os.Looper.loop(Looper.java:137)
07-17 10:47:09.027: W/System.err(24849):    at android.app.ActivityThread.main(ActivityThread.java:4895)
07-17 10:47:09.027: W/System.err(24849):    at java.lang.reflect.Method.invokeNative(Native Method)
07-17 10:47:09.027: W/System.err(24849):    at java.lang.reflect.Method.invoke(Method.java:511)
07-17 10:47:09.027: W/System.err(24849):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:994)
07-17 10:47:09.027: W/System.err(24849):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:761)
07-17 10:47:09.027: W/System.err(24849):    at dalvik.system.NativeStart.main(Native Method)

2 个答案:

答案 0 :(得分:0)

永远不要在UI线程中执行网络操作。按照说明创建一个新线程 Android Socket Connection fail

答案 1 :(得分:0)

将此内容写入build.gradle

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.2.0'
    compile 'com.android.support:design:23.2.0'
    compile 'org.jbundle.util.osgi.wrapped:org.jbundle.util.osgi.wrapped.org.apache.http.client:4.1.2'
    compile "org.apache.httpcomponents:httpmime:4.2.3"
}

并同步项目。

相关问题