android 客户端上传数据给服务器,android 上传文件到服务器

这个示例展示了如何使用Android客户端将图片文件上传到本地HTTP服务器。代码中定义了上传文件的路径、目标URL和上传文件的方法。上传过程中,使用了`HttpURLConnection`和`DataOutputStream`来构造POST请求,将文件以多部分形式发送到服务器。服务器端的Servlet接收到文件后,将其保存到指定目录,并返回确认信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android客户端

package com.example.testandroid;

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.View;

import android.widget.Button;

import android.widget.TextView;

public class PhotoUpload extends Activity {

private String newName = "image.jpg";

private String uploadFile = "/sdcard/image.JPG";// 要上传的文件

private String actionUrl = "http://192.168.0.1:8080/PhotoUpload/servlet/UploadServlet";

private TextView mText1;

private TextView mText2;

private Button mButton;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mText1 = (TextView) findViewById(R.id.myText2);

// 文件路径:

mText1.setText(uploadFile);

mText2 = (TextView) findViewById(R.id.myText3);

// 上传网址:

mText2.setText(actionUrl);

/* 设置mButton的onClick事件处理 */

mButton = (Button) findViewById(R.id.myButton);

mButton.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

uploadFile();

}

});

}

/* 上传文件至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);

// 设置http连接属性

con.setRequestMethod("POST");

con.setRequestProperty("Connection", "Keep-Alive");

con.setRequestProperty("Charset", "UTF-8");

con.setRequestProperty("Content-Type",

"multipart/form-data;boundary=" + boundary);

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);

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(PhotoUpload.this).setTitle("Message")

.setMessage(mess)

.setNegativeButton("确定", new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

}

}).show();

}

}

服务器端servlet

package com.demo;

import java.io.File;

import java.io.IOException;

import java.util.Date;

import java.util.Iterator;

import java.util.List;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.DiskFileUpload;

import org.apache.commons.fileupload.FileItem;

public class UploadServlet extends HttpServlet {

public void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

String temp = request.getSession().getServletContext().getRealPath("/")

+ "temp"; // 临时目录

System.out.println("temp=" + temp);

String loadpath = request.getSession().getServletContext()

.getRealPath("/")

+ "Image"; // 上传文件存放目录

System.out.println("loadpath=" + loadpath);

DiskFileUpload fu = new DiskFileUpload(); // 需要导入commons-fileupload-1.2.2.jar

// http://commons.apache.org/fileupload/

fu.setSizeMax(1 * 1024 * 1024); // 设置允许用户上传文件大小,单位:字节

fu.setSizeThreshold(4096); // 设置最多只允许在内存中存储的数据,单位:字节

fu.setRepositoryPath(temp); // 设置一旦文件大小超过getSizeThreshold()的值时数据存放在硬盘的目录

// 开始读取上传信息

int index = 0;

List fileItems = null;

try {

fileItems = fu.parseRequest(request);

System.out.println("fileItems=" + fileItems);

} catch (Exception e) {

e.printStackTrace();

}

Iterator iter = fileItems.iterator(); // 依次处理每个上传的文件

while (iter.hasNext()) {

FileItem item = (FileItem) iter.next();// 忽略其他不是文件域的所有表单信息

if (!item.isFormField()) {

String name = item.getName();// 获取上传文件名,包括路径

name = name.substring(name.lastIndexOf("\\") + 1);// 从全路径中提取文件名

long size = item.getSize();

if ((name == null || name.equals("")) && size == 0)

continue;

int point = name.indexOf(".");

name = (new Date()).getTime()

+ name.substring(point, name.length()) + index;

index++;

File fNew = new File(loadpath, name);

try {

item.write(fNew);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

} else// 取出不是文件域的所有表单信息

{

String fieldvalue = item.getString();

// 如果包含中文应写为:(转为UTF-8编码)

// String fieldvalue = new

// String(item.getString().getBytes(),"UTF-8");

}

}

String text1 = "11";

response.sendRedirect("result.jsp?text1=" + text1);

}

}

activity_main.xml

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent" >

android:id="@+id/myText2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentTop="true"

android:layout_centerHorizontal="true"

android:layout_marginTop="116dp"

android:ems="10"

android:inputType="textPersonName" />

android:id="@+id/myText3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignLeft="@+id/myText2"

android:layout_below="@+id/myText2"

android:layout_marginTop="45dp"

android:ems="10" />

android:id="@+id/myButton"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_below="@+id/myText3"

android:layout_centerHorizontal="true"

android:layout_marginTop="61dp"

android:text="上传" />

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值