Android经服务器授权登陆并将图片Post到自己服务器的简单小Demo(Java+servlet实现)
来源:互联网 发布:模拟身份证阅读器软件 编辑:程序博客网 时间:2024/05/16 07:48
首先感谢帮助过我的众多程序员大叔们,这是我的第一篇博客
最近,在和朋友聊天的时候帮助别人处理一个上传文件到自己服务器的程序,半天并没有解决那个问题后来有事情就耽误了,这两天想起来,便自己做了这么一个小Demo,就当练练手了,也让我掌握了很多android网络传输方面的知识,程序完善的不是很好,只是实现了服务器授权登陆,并上传文件(可选择)到服务器指定地址的功能。
登录界面获取登录名及密码后,上传至服务器,服务器验证成功反馈给手机端login success,如图:
public class MainActivity extends Activity { protected static final int OK = 0; private Handler handler; private EditText et_username; private EditText et_userpwd; private String result=""; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); et_username=(EditText) this.findViewById(R.id.editText1); et_userpwd=(EditText) this.findViewById(R.id.editText2); handler=new Handler(){ public void handleMessage(Message msg) { if (msg.what == OK){ Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this,UpTranslateActivity.class); startActivity(intent); } } }; } public void click(View v){ new Thread(){ public void run(){ String name=et_username.getText().toString(); String pwd=et_userpwd.getText().toString(); try { URL url=new URL("http://192.168.191.1:8080/andro/AndroidServlet?username="+name+"&userpwd="+pwd); System.out.println("url="+url); HttpURLConnection conn=(HttpURLConnection) url.openConnection(); System.out.println("conn="+conn); //conn.setConnectTimeout(5000); //conn.setRequestMethod("GET"); if(conn.getResponseCode()==200){ System.out.println("访问成功"); InputStream in=conn.getInputStream(); BufferedReader br=new BufferedReader(new InputStreamReader(in)); result=br.readLine(); System.out.println("返回 结果是:"+result); Message msg=new Message(); msg.what=OK; handler.sendMessage(msg); } else{ System.out.println("访问失败"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }.start(); }}
登录成功后,自动跳转至上传图片的界面中,服务器的接受地址URL(例如我的:http://192.168.191.1:8080/andro/UploadShipServlet)固定显示到TextView中, 可以手动打开文件选择器进行图片以及文件的选择,选择完成TextView自动显示文件或者图片在手机中的位置,此时点击上传,就可以上传至服务器端。文件选择器效果如图:
public class UpTranslateActivity extends Activity { public static final int FILE_SELECT_CODE = 1; private EditText Ed_Url; private EditText Ed_Wenjian; private Button upload; private Button choose; private String uploadFile ="/sdcard/123.jpg"; private String actionUrl = "http://192.168.191.1:8080/andro/UploadShipServlet"; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_up_translate); Ed_Url = (EditText) findViewById(R.id.ed_url); Ed_Wenjian = (EditText) findViewById(R.id.ed_wenjian); upload = (Button) findViewById(R.id.bt_up); choose =(Button) findViewById(R.id.bt_choose); Ed_Url.setText(actionUrl); Ed_Wenjian.setText(uploadFile); upload.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub File file = new File(Ed_Wenjian.getText().toString()); String result = UploadUtil.uploadFile(file, actionUrl); Message msg = new Message(); msg.what = 1; msg.obj = result; handler.sendMessage(msg); } }).start(); } }); choose.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub showFileChooser();//打开文件选择器 } }); } private Handler handler = new Handler(){ public void handleMessage(Message msg) { switch(msg.what){ case 1: showDialog("服务器存储路径:\n"+msg.obj); break; } } }; private void showFileChooser() { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.setType("*/*"); intent.addCategory(Intent.CATEGORY_OPENABLE); try { startActivityForResult( Intent.createChooser(intent, "Select a File to Upload"), FILE_SELECT_CODE); } catch (android.content.ActivityNotFoundException ex) { Toast.makeText(this, "Please install a File Manager.", Toast.LENGTH_SHORT).show(); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); switch(requestCode){ case FILE_SELECT_CODE: if(resultCode == RESULT_OK){ Uri uri = data.getData(); String path = FileUtils.getPath(this, uri); Ed_Wenjian.setText(path); } break; } } }
服务器端代码对登录信息进行验证(简单的进行了验证,没写数据库),这里就不贴登录验证的代码了,然后对文件进行了接收处理,上代码:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=utf-8"); request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter(); // 创建文件项目工厂对象 DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置文件上传路径 String upload = this.getServletContext().getRealPath("/"); // 获取系统默认的临时文件保存路径,该路径为Tomcat根目录下的temp文件夹 String temp = System.getProperty("java.io.tmpdir"); // 设置缓冲区大小为 5M factory.setSizeThreshold(1024 * 1024 * 5); // 设置临时文件夹为temp factory.setRepository(new File(temp)); // 用工厂实例化上传组件,ServletFileUpload 用来解析文件上传请求 ServletFileUpload servletFileUpload = new ServletFileUpload(factory); // 解析结果放在List中 try { List<FileItem> list = servletFileUpload.parseRequest(request); for (FileItem item : list) { String name = item.getFieldName(); InputStream is = item.getInputStream(); if (name.contains("content")) { System.out.println(inputStream2String(is)); } else if (name.contains("img")) { try { path = upload+"\\"+item.getName(); inputStream2File(is, path); break; } catch (Exception e) { e.printStackTrace(); } } } out.write(path); //返回给客户端上传成功后路径 } catch (FileUploadException e) { e.printStackTrace(); System.out.println("failure"); out.write("failure"); } out.flush(); out.close(); } // 流转化成字符串 public static String inputStream2String(InputStream is) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); int i = -1; while ((i = is.read()) != -1) { baos.write(i); } return baos.toString(); } // 流转化成文件 public static void inputStream2File(InputStream is, String savePath) throws Exception { System.out.println("文件保存路径为:" + savePath); File file = new File(savePath); InputStream inputSteam = is; BufferedInputStream fis = new BufferedInputStream(inputSteam); FileOutputStream fos = new FileOutputStream(file); int f; while ((f = fis.read()) != -1) { fos.write(f); } fos.flush(); fos.close(); fis.close(); inputSteam.close(); }
最终的效果图就是这样了:
2 0
- Android经服务器授权登陆并将图片Post到自己服务器的简单小Demo(Java+servlet实现)
- Android简单实现将手机图片上传到服务器中
- Android通过POST方式传递数据到服务器简单demo
- java代码post图片(二进制文件)到服务器,servlet接收
- Java实现自己的Servlet服务器
- Android使用post方式上传图片到服务器的方法
- Android使用post方式上传图片到服务器的方法
- android实现简单的图片上传服务器
- 服务器ssh_key授权,并禁止密码登陆
- android将图片上传到php服务器
- Android图片压缩并上传到服务器
- Android客户端post方式连接web(servlet)服务器实现简单登录
- 通过Servlet 将服务器硬盘图片 展示到浏览器
- 通过Servlet 将服务器硬盘图片 展示到浏览器
- 通过Servlet 将服务器硬盘图片 展示到浏览器
- java_通过Servlet 将服务器硬盘图片展示到浏览器
- post上传图片到服务器
- java 代码post表单数据到服务器,servlet接收处理
- 欢迎使用CSDN-markdown编辑器
- React native 父组件 子组件之间的调用
- node.js上传并解析Excel文件
- JQuery input length focus
- XAMPP添加虚拟主机之后提示Access forbidden! 403错误的解决办法
- Android经服务器授权登陆并将图片Post到自己服务器的简单小Demo(Java+servlet实现)
- 对Category进一步了解
- MySQL学习笔记1:初涉MySQL
- 纯css制作旋转图片
- 单例模式
- word无法内部打开html链接
- Android 手势监听之双击监听
- apprtc demo的app.yaml分析
- 升级数据库