服务器采用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上传文件的示例代码片段: ```java public void uploadFile(String filePath) { HttpURLConnection connection = null; try { URL url = new URL("http://yourserver.com/upload"); ...
Android上传文件工具类
在Android平台上,将文件...以上就是Android上传文件到服务器的关键知识点,包括OkHttp的使用、Multipart上传、进度显示、错误处理、权限管理以及线程控制。实际开发中,还需要根据具体需求和服务器API进行调整和优化。
android 上传文件到aspx接口 ,已经测试通过了。上传 几十MB的文件都没问题。 资源的情况介绍: http://blog.csdn.net/fengshukaihua/article/details/79235525
5. **文件上传**:使用FTPClient的storeFile方法上传文件。在上传过程中,可以监听数据传输进度,以便展示给用户。 ```java File selectedFile = new File("/sdcard/path/to/image.jpg"); FileInputStream fis = ...
总的来说,Android上传文件到服务器涉及到客户端和服务端的协同工作,包括文件的读取、HTTP请求的构建、服务器接口的设计以及文件的存储。多文件上传只是在单文件上传的基础上进行扩展,需要对每个文件进行同样的...
综上所述,Android上传文件到服务端涉及到网络请求、文件读取、请求体构建、发送请求及处理响应等多个环节。通过使用像`OkHttp`这样的库,可以简化这些操作,让开发者更专注于业务逻辑。在这个案例中,...
以上就是Android设备上传文件到C# WebService的基本步骤和关键知识点。实际开发时,要根据项目需求进行相应的调整和优化。参考提供的链接(http://blog.sina.com.cn/s/blog_8d71d5140101fk8r.html),可以找到更具体...
以上就是Android上传文件至服务器并提供客户端下载的基本流程和关键知识点。具体实现时,需要结合实际项目需求和所选技术栈进行调整。提供的源码可以帮助理解并实践这些步骤。在实际开发中,确保遵循最佳实践,提高...
Android上传文件的代码例子。用于演示app使用HttpUrlConnection、android-async-http、Retrofit三种方式上传文件的功能,还演示了ftp上传和sftp上传的功能。
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上传文件到服务端并显示进度条涉及到网络编程、多线程和UI更新等多个方面,开发者需要对这些知识有深入理解才能实现流畅且可靠的上传功能。
"android 文件上传含进度条"这个标题恰好揭示了我们要实现的功能:在Android应用中,既要能上传文件,又要能在上传过程中显示进度条,以提升用户体验。 首先,我们需要理解Android的文件操作机制。Android提供了...
"android上传文件jar"这个标题暗示我们这里涉及的是一个Android应用程序组件,它利用特定的库(jar文件)来处理文件上传到服务器的过程。描述中提到的"这个是android上传给服务器资源时需要的jar"进一步确认了这一点...
在Android平台上进行文件上传至C#服务器是一项常见的任务,尤其在移动应用开发中,比如图片分享、文件同步等场景。本项目提供了一个直接可用的解决方案,无需修改代码或配置即可运行,大大简化了开发流程。 首先,...