`
yuky1327
  • 浏览: 125085 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

android上传文件

 
阅读更多
服务器采用ssh架构,其实就是一个action
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;

	@Override
	public 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() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent();
				intent.setType("image/*");
				intent.setAction(Intent.ACTION_GET_CONTENT);
				startActivityForResult(intent, 1);
			}
		});
	}

	@Override
	protected 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;
				// 向流中写入fileMeta
				dos.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 image
		String[] proj = { MediaStore.Images.Media.DATA };
		Cursor cursor = managedQuery(uri, proj, // Which columns to return
				null, // 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上传文件到 net服务器 包含两方代码

    以下是一个简单的Android上传文件的示例代码片段: ```java public void uploadFile(String filePath) { HttpURLConnection connection = null; try { URL url = new URL("http://yourserver.com/upload"); ...

    Android上传文件工具类

    Android上传文件工具类

    android上传文件到服务器

    在Android平台上,将文件...以上就是Android上传文件到服务器的关键知识点,包括OkHttp的使用、Multipart上传、进度显示、错误处理、权限管理以及线程控制。实际开发中,还需要根据具体需求和服务器API进行调整和优化。

    android 上传文件到.net接口

    android 上传文件到aspx接口 ,已经测试通过了。上传 几十MB的文件都没问题。 资源的情况介绍: http://blog.csdn.net/fengshukaihua/article/details/79235525

    Android上传文件到FTP

    5. **文件上传**:使用FTPClient的storeFile方法上传文件。在上传过程中,可以监听数据传输进度,以便展示给用户。 ```java File selectedFile = new File("/sdcard/path/to/image.jpg"); FileInputStream fis = ...

    android上传文件到服务器(客户端加服务端源码)

    总的来说,Android上传文件到服务器涉及到客户端和服务端的协同工作,包括文件的读取、HTTP请求的构建、服务器接口的设计以及文件的存储。多文件上传只是在单文件上传的基础上进行扩展,需要对每个文件进行同样的...

    android 上传文件到服务端案例

    综上所述,Android上传文件到服务端涉及到网络请求、文件读取、请求体构建、发送请求及处理响应等多个环节。通过使用像`OkHttp`这样的库,可以简化这些操作,让开发者更专注于业务逻辑。在这个案例中,...

    Android 上传文件到c# webservice

    以上就是Android设备上传文件到C# WebService的基本步骤和关键知识点。实际开发时,要根据项目需求进行相应的调整和优化。参考提供的链接(http://blog.sina.com.cn/s/blog_8d71d5140101fk8r.html),可以找到更具体...

    android上传文件至服务器提供客户端下载

    以上就是Android上传文件至服务器并提供客户端下载的基本流程和关键知识点。具体实现时,需要结合实际项目需求和所选技术栈进行调整。提供的源码可以帮助理解并实践这些步骤。在实际开发中,确保遵循最佳实践,提高...

    Android上传文件的代码例子

    Android上传文件的代码例子。用于演示app使用HttpUrlConnection、android-async-http、Retrofit三种方式上传文件的功能,还演示了ftp上传和sftp上传的功能。

    android 上传文件

    android 上传文件 progressBar.setMax((int)file.length()); String sourceid = fileService.find(file); Socket socket = new Socket("192.168.1.157", 7878); OutputStream outStream = socket....

    android 上传文件(包含录音)

    以上是基于提供的标签和描述总结出的Android上传文件(包括录音)的关键知识点。实际开发时,还需注意Android的权限管理,如读写存储权限和互联网权限,以及适配不同设备和Android版本的兼容性问题。

    Android上传文件到服务端并显示进度条

    在Android应用开发中,有时需要将本地文件上传到服务端,...总的来说,Android上传文件到服务端并显示进度条涉及到网络编程、多线程和UI更新等多个方面,开发者需要对这些知识有深入理解才能实现流畅且可靠的上传功能。

    android 文件上传含进度条

    "android 文件上传含进度条"这个标题恰好揭示了我们要实现的功能:在Android应用中,既要能上传文件,又要能在上传过程中显示进度条,以提升用户体验。 首先,我们需要理解Android的文件操作机制。Android提供了...

    android上传文件jar

    "android上传文件jar"这个标题暗示我们这里涉及的是一个Android应用程序组件,它利用特定的库(jar文件)来处理文件上传到服务器的过程。描述中提到的"这个是android上传给服务器资源时需要的jar"进一步确认了这一点...

    android 上传文件至C#服务器

    在Android平台上进行文件上传至C#服务器是一项常见的任务,尤其在移动应用开发中,比如图片分享、文件同步等场景。本项目提供了一个直接可用的解决方案,无需修改代码或配置即可运行,大大简化了开发流程。 首先,...

Global site tag (gtag.js) - Google Analytics