android 图片上传的问题

服务端要求以二进制流的方式上传图片,于是就在网上各种找。。但找来找去发现都不行啊,很是迷惑。

于是各种尝试,尝试bitmap转二进制,尝试二进制转base64 均未果。


最后是以读取文件流的方式实现。记录一下代码部分来自网络

package com.example.imageupload;

import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {
	private String newName ="4aa95339-1758-4c5a-bfe4-2aed24e0ff61.jpg";
//	private String uploadFile ="/sdcard/image.JPG";
	private String uploadFile ="/storage/sdcard0/DCIM/Camera/IMG_20160607_105822.jpg";
	 private String actionUrl ="http://192.168.0.71:8086/HelloWord/myForm";
	
	private TextView mText1;
	private TextView mText2;
	private Button mButton;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		mText1 = (TextView) findViewById(R.id.myText2);
		//"文件路径:\n"+
		mText1.setText(uploadFile);
		mText2 = (TextView) findViewById(R.id.myText3);
		//"上传网址:\n"+
		mText2.setText(actionUrl);
		/* 设置mButton的onClick事件处理 */    
		mButton = (Button) findViewById(R.id.myButton);
		mButton.setOnClickListener(new View.OnClickListener()
		{
			public void onClick(View v)
			{
				uploadFile();
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	 /* 上传文件至Server的方法 */
    private void uploadFile()
    {
      String end ="\r\n";
      String twoHyphens ="--";
      String boundary ="*****";
      try
      {
        URL url =new URL(actionUrl);
        HttpURLConnection con=(HttpURLConnection)url.openConnection();
        /* 允许Input、Output,不使用Cache */
        con.setDoInput(true);
        con.setDoOutput(true);
        con.setUseCaches(false);
        /* 设置传送的method=POST */
        con.setRequestMethod("POST");
        /* setRequestProperty */
        con.setRequestProperty("Connection", "Keep-Alive");
        con.setRequestProperty("Charset", "UTF-8");
        con.setRequestProperty("Content-Type",
                           "multipart/form-data;boundary="+boundary);
        /* 设置DataOutputStream */
        DataOutputStream ds =
          new DataOutputStream(con.getOutputStream());
        ds.writeBytes(twoHyphens + boundary + end);
        ds.writeBytes("Content-Disposition: form-data; "+
                      "name=\"file1\";filename=\""+
                      newName +"\""+ end);
        ds.writeBytes(end);  
        /* 取得文件的FileInputStream */
        FileInputStream fStream =new FileInputStream(uploadFile);
        /* 设置每次写入1024bytes */
        int bufferSize =1024;
        byte[] buffer =new byte[bufferSize];
        int length =-1;
        /* 从文件读取数据至缓冲区 */
        while((length = fStream.read(buffer)) !=-1)
        {
          /* 将资料写入DataOutputStream中 */
          ds.write(buffer, 0, length);
        }
        ds.writeBytes(end);
        ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
        /* close streams */
        fStream.close();
        ds.flush();
        /* 取得Response内容 */
        InputStream is = con.getInputStream();
        int ch;
        StringBuffer b =new StringBuffer();
        while( ( ch = is.read() ) !=-1 )
        {
          b.append( (char)ch );
        }
        /* 将Response显示于Dialog */
        showDialog("上传成功"+b.toString().trim());
        /* 关闭DataOutputStream */
        ds.close();
      }
      catch(Exception e)
      {
        showDialog("上传失败"+e);
      }
    }
	/* 显示Dialog的method */
	private void showDialog(String mess)
	{
		new AlertDialog.Builder(MainActivity.this).setTitle("Message")
		.setMessage(mess)
		.setNegativeButton("确定",new DialogInterface.OnClickListener()
		{
			public void onClick(DialogInterface dialog, int which)
			{          
			}
		})
		.show();
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值