1.文件上传给服务器,服务器端必然要写代码进行支持,如下:

我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Apache给我们提供了完善的框架,我们只要引入commons-fileupload-1.2.2.jar  和  commons-io-2.0.1.jar就可以使用这个Apache给我们封装好的框架,这两个jar放到如下目录下:

WebContent/WEB-INF/lib/

引入jar包之后,接下来我们新建一个Servlet程序,命名为"UploadServlet.java",整个工程如下图:

 

 

2.PC端上传数据到服务器:

编写服务器端代码UploadServlet.java代码:

  1. package com.himi.web;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.List;
  5. import javax.servlet.ServletException;
  6. import javax.servlet.annotation.WebServlet;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.apache.commons.fileupload.FileItem;
  11. import org.apache.commons.fileupload.FileItemFactory;
  12. import org.apache.commons.fileupload.disk.DiskFileItemFactory;
  13. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  14. /**
  15. * Servlet implementation class UploadServlet
  16. */
  17. @WebServlet("/UploadServlet")
  18. public class UploadServlet extends HttpServlet {
  19. private static final long serialVersionUID = 1L;
  20. /**
  21. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  22. */
  23. protected void doPost(HttpServletRequest request,
  24. HttpServletResponse response) throws ServletException, IOException {
  25. // 判断上传数据是否包含文件,true--包含文件,false--不包含文件
  26. boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  27. //如果上传数据包含文件
  28. if (isMultipart) {
  29. //获取servlet上下文真实的路径
  30. String realpath = request.getSession().getServletContext()
  31. .getRealPath("/files");
  32. //打印servlet上下文真实的路径给用户观察
  33. System.out.println(realpath);
  34. File dir = new File(realpath);
  35. if (!dir.exists())
  36. dir.mkdirs();
    //public DiskFileItemFactory()://创建一个基于硬盘的FileItem工厂。
  37. FileItemFactory factory = new DiskFileItemFactory();
    //创建一个文件上传处理器  
    ServletFileUpload upload = new ServletFileUpload(factory);
  38. upload.setHeaderEncoding("UTF-8");
  39. try {
  40. //工具类ServletFileUpload解析我们的http的post请求的参数数据,解析结果赋给一个List集合
  41. //List集合中是我们form(jsp)标签中我们的每个input节点的数据
  42. List<FileItem> items = upload.parseRequest(request);
  43. for (FileItem item : items) {
  44. //如果是一个普通的表单
  45. if (item.isFormField()) {
  46. String name1 = item.getFieldName();// 得到请求参数的名称
  47. String value = item.getString("UTF-8");// 得到参数值
  48. System.out.println(name1 + "=" + value);
  49. } else {//如果里面有文件数据,就把文件写到当前servlet上下文真实路径里面,文件名称是以系统事件命名的
  50. item.write(new File(dir, System.currentTimeMillis()
  51. + item.getName().substring(
  52. item.getName().lastIndexOf("."))));
  53. }
  54. }
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. }
  59. }
  60. }

同时我们还要编写FileUpload.jsp代码如下:

  1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  2. <html>
  3. <head>
  4. <%@ page language="java" contentType="text/html; charset=utf-8"
  5. pageEncoding="utf-8"%>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  7. <title>???????</title>
  8. </head>
  9. <body>
  10. <form action="UploadServlet" method="post" enctype="multipart/form-data">
  11. 请选择文件上传<input type="file" name="file"> <br>
  12. <input type="submit" value="提交"> <br>
  13. </form>
  14. </body>
  15. </html>

运行FileUpload.jsp动态页面在Tomcat服务器上,显示效果如下:

 

复制路径http://localhost:8080/web/FileUpload.jsp到360浏览器上,如下:

 

这里我们选择文件为桌面上的一个 心得.txt ,我们提交之后,观察浏览器 和 服务器反应,如下:

浏览器的反应:

 

 

 

服务器的反应:

 

 

 

追溯到这个打印出来的路径,我们找到了我们上传的文件,如下:

 

打开文件,文件内容是对的。

到这里说明PC到服务器端的文件上传是没有问题的。

 

3.Android手机客户端上传数据到服务器:

(1)我们新建一个Android工程,如下,命名为"文件上传器",工程一览图如下:

 

 

(2)复制loopj/android-async-http的Http开源框架到项目中:

 

(3)布局文件activity_main.xml:

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical"
  6. tools:context="com.himi.upload.MainActivity" >
  7. <EditText
  8. android:id="@+id/et_path"
  9. android:layout_width="wrap_content"
  10. android:layout_height="wrap_content"
  11. android:hint="请输入要上传文件的路径" />
  12. <Button
  13. android:layout_width="match_parent"
  14. android:layout_height="wrap_content"
  15. android:onClick="upload"
  16. android:text="上传" />
  17. <ProgressBar
  18. android:id="@+id/progressBar1"
  19. style="?android:attr/progressBarStyleHorizontal"
  20. android:layout_width="fill_parent"
  21. android:layout_height="wrap_content" />
  22. </LinearLayout>

布局效果如下:

 

(4)同时MainActivity.java:

  1. package com.himi.upload;
  2. import java.io.File;
  3. import java.io.FileNotFoundException;
  4. import org.apache.http.Header;
  5. import android.app.Activity;
  6. import android.os.Bundle;
  7. import android.view.View;
  8. import android.widget.EditText;
  9. import android.widget.ProgressBar;
  10. import android.widget.Toast;
  11. import com.loopj.android.http.AsyncHttpClient;
  12. import com.loopj.android.http.AsyncHttpResponseHandler;
  13. import com.loopj.android.http.RequestParams;
  14. public class MainActivity extends Activity {
  15. private EditText et_path;
  16. private ProgressBar progressBar1;
  17. @Override
  18. protected void onCreate(Bundle savedInstanceState) {
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. et_path = (EditText) findViewById(R.id.et_path);
  22. progressBar1 = (ProgressBar) findViewById(R.id.progressBar1);
  23. }
  24. public void upload(View view) {
  25. String path = et_path.getText().toString().trim();
  26. File file = new File(path);
  27. if(file.exists()) {
  28. String serverurl = getString(R.string.server);
  29. AsyncHttpClient client = new AsyncHttpClient();
  30. RequestParams params = new RequestParams();
  31. try {
  32. params.put("file", file);
  33. } catch (FileNotFoundException e) {
  34. // TODO 自动生成的 catch 块
  35. e.printStackTrace();
  36. }//Upload a File
  37. client.post(serverurl, params, new AsyncHttpResponseHandler() {
  38. @Override
  39. public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
  40. Toast.makeText(MainActivity.this, "上传成功", 0).show();
  41. }
  42. /**
  43. * bytesWritten:当前进度
  44. * totalSize:总进度
  45. */
  46. @Override
  47. public void onProgress(int bytesWritten, int totalSize) {
  48. progressBar1.setMax(totalSize);
  49. progressBar1.setProgress(bytesWritten);
  50. super.onProgress(bytesWritten, totalSize);
  51. }
  52. @Override
  53. public void onFailure(int statusCode, Header[] headers,
  54. byte[] responseBody, Throwable error) {
  55. Toast.makeText(MainActivity.this, "上传失败", 0).show();
  56. }
  57. });
  58. }else {
  59. Toast.makeText(this, "文件不存在,请检查路径", 0).show();
  60. }
  61. }
  62. }

在模拟器文件的文件目录,存储imgs.jpg图片文件在目录/data/imgs.ipg,如下:

 

然后布署程序到模拟器上,输入上面imgs.jpg文件的存在目录,点击"上传",提示"上传成功"土司:

 

(5)这时候服务器端出现提示信息,说明我们已经上传成功了,这个提示信息是上传文件的存放的位置:

 

追溯到这个目录下,我们看到了我们之前上传的imgs.jpg图片,只是这里重新以系统时间进行命名了,如下:

 

Android(java)学习笔记157:开源框架的文件上传(只能使用Post)的更多相关文章

  1. Android(java)学习笔记214:开源框架的文件上传(只能使用Post)

    1.文件上传给服务器,服务器端必然要写代码进行支持,如下: 我们新建一个FileUpload.jsp的动态网页,同时我们上传文件只能使用post方式(不可能将上传数据拼凑在url路径下),上传数据Ap ...

  2. 从.Net到Java学习第十篇——Spring Boot文件上传和下载

    从.Net到Java学习系列目录 图片上传 Spring Boot中的文件上传就是Spring MVC中的文件上传,将其集成进来了. 在模板目录创建一个新的页面 profile/uploadPage. ...

  3. JSP学习笔记(四):文件上传

    JSP 可以与 HTML form 标签一起使用,来允许用户上传文件到服务器.上传的文件可以是文本文件或图像文件或任何文档.我们使用 Servlet 来处理文件上传,使用到的文件有: upload.j ...

  4. CodeIgniter学习笔记五:分页,文件上传,session,验证码

    一.分页 示例代码: //装载类文件 $this -> load -> library('pagination'); $controller = $this->router-> ...

  5. AntDesign vue学习笔记(九)自定义文件上传

    第七节时提到,上传文件时实际可能需要传输一个token. 1.查看vue antdesign文档https://vue.ant.design/components/upload-cn/ 2.使用cus ...

  6. 笨鸟先飞之Java(一)--使用struts2框架实现文件上传

    无论是.net还是Java,我们最常接触到的就是文件的上传和下载功能,在Java里要实现这两个经常使用功能会有非常多种解决方案,可是struts2的框架却能给我们一个比較简单的方式,以下就一起来看吧: ...

  7. jersey框架实现文件上传

    jersey框架是一个开源的RESTful的框架,实现了实现了JAX-RS规范,进一步地简化 RESTful service 和 client 开发.当然而且是必须的,jersey对文件的上传和下载也 ...

  8. layUI框架中文件上传前后端交互及遇到的相关问题

    下面我将讲述一下我在使用layUI框架中文件上传所遇到的问题: 前端jsp页面: <div class="layui-form-item"> <label cla ...

  9. node.js使用express框架进行文件上传

    关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...

随机推荐

  1. Opencv与dlib联合进行人脸关键点检测与识别

    前言 依赖库:opencv 2.4.9 /dlib 19.0/libfacedetection 本篇不记录如何配置,重点在实现上.使用libfacedetection实现人脸区域检测,联合dlib标记 ...

  2. 【Codeforces 582A】 GCD Table

    [题目链接] 点击打开链接 [算法] G中最大的数一定也是a中最大的数.          G中次大的数一定也是a中次大的数. 第三.第四可能是由最大和次大的gcd产生的 那么就不难想到下面的算法: ...

  3. you are the one(区间dp)

    传送门 You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  4. 你真的懂redis吗?

    Redis在互联网技术存储方面使用如此广泛,几乎所有的后端技术面试官都要在Redis的使用和原理方面对小伙伴们进行各种刁难.作为一名在互联网技术行业打击过成百上千名[请允许我夸张一下]的资深技术面试官 ...

  5. 洛谷P1999三国游戏

    题目:https://www.luogu.org/problemnew/show/P1199 仔细想想,两方都拿不到每个武将的配对中最大的: 本来想的是如果有武将a,b,对应最大ma,mb,次大ca, ...

  6. Linear Regression_最小二乘(LMS)

    %% Machine Learining----Linear Regression close all clear %%data load Year = linspace(,,); Price = [ ...

  7. mysql连接过多-报错

    有两种方法: 1,错误连接参数 max_connect_errors,在配置文件中调整增大. 比如:修改mysql配置文件,在[mysqld]字段下面添加 max_connect_errors=102 ...

  8. Unity网格合并_材质合并[转]

    http://blog.csdn.net/chenggong2dm/article/details/41699029

  9. 解决sqlserver的sql脚本内存不足问题

    1.Win+R输出cmd 2.sqlcmd -i  E:\Work\xxxxx.sql -d xxxxx(数据库名称) -s 127.0.0.1

  10. 51nod 1119【杨辉三角】

    思路: = =杨辉三角的应用,组合数的应用: C(N+M,N); 逆元一发,费马小定理,OK. #include <stdio.h> #include <string.h> # ...