您的位置:首页 > 移动开发 > Android开发

android 上传文件到服务器

2016-01-29 19:53 381 查看
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

view source

print?

<
RelativeLayout
xmlns:android
=
"http://schemas.android.com/apk/res/android"
xmlns:tools
=
"http://schemas.android.com/tools"
android:layout_width
=
"match_parent"
android:layout_height
=
"match_parent"
>
<
EditText
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"
/>
<
EditText
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"
/>
<
Button
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
=
"上传"
/>
</
RelativeLayout
>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: