android上传文件
16lz
2022-05-28
服务器采用ssh架构,其实就是一个action
android端,首先选择一个图片或者录音或者视频,在选择完毕的时候会上传到服务器中。
附件为android代码,服务器则自己搭建。
package action;import java.io.File;import org.apache.commons.io.FileUtils;import com.opensymphony.xwork2.ActionSupport;public class UserAction extends ActionSupport {private static final long serialVersionUID = 1L;private int result;private String msg;private String uploadedPictureFileName;private File uploadedPicture;// --------------------------------------Get And// Set--------------------------------------------------//public int getResult() {return result;}public void setResult(int result) {this.result = result;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public String getUploadedPictureFileName() {return uploadedPictureFileName;}public void setUploadedPictureFileName(String uploadedPictureFileName) {this.uploadedPictureFileName = uploadedPictureFileName;}public File getUploadedPicture() {return uploadedPicture;}public void setUploadedPicture(File uploadedPicture) {this.uploadedPicture = uploadedPicture;}// --------------------------------------Method--------------------------------------------------//public String receiveFile() throws Exception {File f = new File("f:\\" + getUploadedPictureFileName());System.out.println("f:\\" + getUploadedPictureFileName());FileUtils.copyFile(getUploadedPicture(), f);return null;}}
android端,首先选择一个图片或者录音或者视频,在选择完毕的时候会上传到服务器中。
package cn.upload;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import android.app.Activity;import android.content.ContentResolver;import android.content.Intent;import android.database.Cursor;import android.graphics.Bitmap;import android.graphics.BitmapFactory;import android.net.Uri;import android.os.Bundle;import android.provider.MediaStore;import android.util.Log;import android.view.View;import android.widget.Button;import android.widget.ImageView;public class UploadAppActivity extends Activity {private String urlServer = "http://192.168.1.202:8080/aa/user/user!receiveFile.action";private String lineEnd = "\r\n";private String pathOfPicture;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Button button = (Button) findViewById(R.id.b01);button.setText("选择图片");button.setOnClickListener(new Button.OnClickListener() {@Overridepublic void onClick(View v) {Intent intent = new Intent();intent.setType("image/*");intent.setAction(Intent.ACTION_GET_CONTENT);startActivityForResult(intent, 1);}});}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {System.out.println(requestCode + "=============================");if (resultCode == RESULT_OK) {Uri uri = data.getData();pathOfPicture = getAbsoluteImagePath(uri);System.out.println("ok============================="+ pathOfPicture);Log.e("uri", uri.getHost());ContentResolver cr = this.getContentResolver();try {// 选InputStream is = cr.openInputStream(uri);Bitmap bitmap = BitmapFactory.decodeStream(is);ImageView imageView = (ImageView) findViewById(R.id.iv01);imageView.setImageBitmap(bitmap);File f = new File(pathOfPicture);System.out.println("--------------------------------"+ f.exists());// 上传服务器int bytesAvailable, bufferSize, bytesRead;int maxBufferSize = 1 * 1024 * 512;byte[] buffer = null;String boundary = "---------------------------265001916915724";HttpURLConnection connection = null;DataOutputStream dos = null;FileInputStream fin = null;URL url = new URL(urlServer);connection = (HttpURLConnection) url.openConnection();// 允许向url流中读写数据connection.setDoInput(true);connection.setDoOutput(true);connection.setUseCaches(true);// 启动post方法connection.setRequestMethod("POST");// 设置请求头内容connection.setRequestProperty("connection", "Keep-Alive");connection.setRequestProperty("Content-Type", "text/plain");// 伪造请求头connection.setRequestProperty("Content-Type","multipart/form-data;boundary=" + boundary);// 开始伪造POST Data里面的数据dos = new DataOutputStream(connection.getOutputStream());fin = new FileInputStream(pathOfPicture);System.out.println("开始上传图片");String end = f.getName().substring(f.getName().lastIndexOf("."), f.getName().length());String bakFile = "1_" + System.currentTimeMillis() + end;System.out.println("bakFile:" + bakFile);String fileMeta = "--"+ boundary+ lineEnd+ "Content-Disposition: form-data; name=\"uploadedPicture\"; filename=\""+ bakFile + "\"" + lineEnd + "Content-Type: image/jpeg"+ lineEnd + lineEnd;// 向流中写入fileMetados.write(fileMeta.getBytes());// 取得本地图片的字节流,向url流中写入图片字节流bytesAvailable = fin.available();bufferSize = Math.min(bytesAvailable, maxBufferSize);buffer = new byte[bufferSize];bytesRead = fin.read(buffer, 0, bufferSize);while (bytesRead > 0) {dos.write(buffer, 0, bufferSize);bytesAvailable = fin.available();bufferSize = Math.min(bytesAvailable, maxBufferSize);bytesRead = fin.read(buffer, 0, bufferSize);}dos.writeBytes(lineEnd + lineEnd);// --------------------伪造images.jpg信息结束-----------------------------------// POST Data结束dos.writeBytes("--" + boundary + "--");// Server端返回的信息System.out.println("" + connection.getResponseCode());System.out.println("" + connection.getResponseMessage());if (dos != null) {dos.flush();dos.close();}System.out.println("upload success-----------------------------------------");} catch (Exception e) {Log.e("Exception", e.getMessage());}}super.onActivityResult(requestCode, resultCode, data);}protected String getAbsoluteImagePath(Uri uri) {// can post imageString[] proj = { MediaStore.Images.Media.DATA };Cursor cursor = managedQuery(uri, proj, // Which columns to returnnull, // WHERE clause; which rows to return (all rows)null, // WHERE clause selection arguments (none)null); // Order-by clause (ascending by name)int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);cursor.moveToFirst();return cursor.getString(column_index);}}
附件为android代码,服务器则自己搭建。
更多相关文章
- android 实现无限定时循环viewpager
- Android(安卓)自定义文本框(带图片)
- android邮件发送几种方式
- Android(安卓)图片缩放实例详解
- Android圆角图片封装类(直接使用)
- android旋转图片
- android获取图库图片并返回
- android实现 服务器功能
- android WebView 拍照上传图片兼容