Android 上传文件Tomcat接收的代码

Android端:


    compile 'org.xutils:xutils:3.5.0'
RequestParams params = new RequestParams(url);
params.addBodyParameter("name", "Image_1001.png");
params.addBodyParameter("image", file);
x.http().post(params, new Callback.CommonCallback<String>() {
    @Override
    public void onSuccess(String result) {
        Log.e("doit", "onSuccess:" + result);
    }

    @Override
    public void onError(Throwable ex, boolean isOnCallback) {
        Log.e("doit", "onError:" + ex);
    }

    @Override
    public void onCancelled(CancelledException cex) {

    }

    @Override
    public void onFinished() {

    }
});

正常的上传就行了:

Tomcat端代码:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		// 获得磁盘文件条目工厂。
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// 获取文件上传需要保存的路径,upload文件夹需存在。
		String path = request.getSession().getServletContext().getRealPath("/upload");
		// 设置暂时存放文件的存储室,这个存储室可以和最终存储文件的文件夹不同。因为当文件很大的话会占用过多内存所以设置存储室。
		factory.setRepository(new File(path));
		// 设置缓存的大小,当上传文件的容量超过缓存时,就放到暂时存储室。
		factory.setSizeThreshold(1024 * 1024);
		// 上传处理工具类(高水平API上传处理?)
		ServletFileUpload upload = new ServletFileUpload(factory);

		try {
			// 调用 parseRequest(request)方法 获得上传文件 FileItem 的集合list 可实现多文件上传。
			List<FileItem> list = upload.parseRequest(new ServletRequestContext(request));
			for (FileItem item : list) {
				// 获取表单属性名字。
				String name = item.getFieldName();
				// 如果获取的表单信息是普通的文本信息。即通过页面表单形式传递来的字符串。
				if (item.isFormField()) {
					// 获取用户具体输入的字符串,
					String value = item.getString();
					request.setAttribute(name, value);
				} else { // 如果传入的是非简单字符串,而是图片,音频,视频等二进制文件。
					// 获取路径名
					String value = item.getName();
					
					// 取到最后一个反斜杠。
					int start = value.lastIndexOf("\\");
					// 截取上传文件的 字符串名字。+1是去掉反斜杠。
					String filename = value.substring(start + 1);
					
					request.setAttribute(name, filename);
					// 收到写到接收的文件中。
					OutputStream out = new FileOutputStream(new File(path, filename));
					InputStream in = item.getInputStream();
					int length = 0;
					byte[] buf = new byte[1024];
					while ((length = in.read(buf)) != -1) {
						out.write(buf, 0, length);
					}
					in.close();
					out.close();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}

		
	}

路径一定要存在;

最近Chrome一直卡,原地址卡掉了,找到了就补;

猜你喜欢

转载自blog.csdn.net/try_zp_catch/article/details/82784529
今日推荐