|
摘自X神之怒博客
[android]代码库
Android客户端
- view sourceprint?
- 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
来源:{http://bbs.zecoki.com/forum-70-1.html}
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
上一篇: Android4.4 增加/system/priv-app 跟 原来的/system/app 的区别下一篇: Fastboot专业解释
|