安卓开发多文件上传Spring MVC作为服务器端
来源:互联网 发布:镇江淘宝模特兼职招聘 编辑:程序博客网 时间:2024/06/08 15:59
服务器端核心代码:
package com.missionsky.mvc.controller;import org.apache.commons.fileupload.FileUpload;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.servlet.ServletRequestContext;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.util.ArrayList;import java.util.Iterator;import java.util.List;@Controller@RequestMapping("/upload.do")public class UploadController { @RequestMapping(params = "intent=upload") public void uploadFile(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException { int num = 0; System.out.println("FileUploadOrLoad"); // 设置request编码,主要是为了处理普通输入框中的中文问题 request.setCharacterEncoding("UTF-8"); // 这里对request进行封装,RequestContext提供了对request多个访问方法 org.apache.commons.fileupload.RequestContext requestContext = new ServletRequestContext(request); // 判断表单是否是Multipart类型的。这里可以直接对request进行判断,不过已经以前的用法了 if (FileUpload.isMultipartContent(requestContext)) { num++; DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置文件的缓存路径 factory.setRepository(new File("d:/tmp/")); File dir = new File("d:\\download"); System.out.println("dir"); if (!dir.exists()) { dir.mkdirs(); } // System.out.print("已经生成临时文件"); ServletFileUpload upload = new ServletFileUpload(factory); // 设置上传文件大小的上限,-1表示无上限 upload.setSizeMax(100000 * 1024 * 1024); List items = new ArrayList(); try { // 上传文件,并解析出所有的表单字段,包括普通字段和文件字段 items = upload.parseRequest(request); } catch (FileUploadException e1) { System.out.println("文件上传发生错误" + e1.getMessage()); } // 下面对每个字段进行处理,分普通字段和文件字段 Iterator it = items.iterator(); while (it.hasNext()) { DiskFileItem fileItem = (DiskFileItem) it.next(); // 如果是普通字段 if (fileItem.isFormField()) { System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + new String(fileItem.getString().getBytes("iso8859-1"), "gbk")); } else { System.out.println(fileItem.getFieldName() + " " + fileItem.getName() + " " + fileItem.isInMemory() + " " + fileItem.getContentType() + " " + fileItem.getSize()); // 保存文件,其实就是把缓存里的数据写到目标路径下 if (fileItem.getName() != null && fileItem.getSize() != 0) { File fullFile = new File(fileItem.getName()); File newFile = new File("d:/download/" + fullFile.getName() + num); try { fileItem.write(newFile); // 文件上传成功 跟新数据库任务表 添加对应任务 } catch (Exception e) { e.printStackTrace(); } } else { System.out.println("文件没有选择 或 文件内容为空"); } } } //上传完毕后手动删除缓存的 文件 File file = new File("D:/tmp"); if (file.exists()) { File[] listFiles = file.listFiles(); for (File deleteFile : listFiles) { deleteFile.delete(); } } // 设置响应码 response.setStatus(200); } }}
客户端核心代码:
①new UploadTask("http://192.168.206.125:8080/spring/upload.do?intent=upload", files).execute();②private class UploadTask extends AsyncTask<Void, Void, String> { private String url; private List<File> files; public UploadTask(String url, List<File> files) { // TODO Auto-generated constructor stub this.url = url; this.files = files; } @Override protected String doInBackground(Void... params) { // TODO Auto-generated method stub return uploadFile(url, files); } @Override protected void onPostExecute(String result) { // TODO Auto-generated method stub super.onPostExecute(result); Toast.makeText(mActivity, result, Toast.LENGTH_SHORT).show(); } } ③ private String uploadFile(String url, List<File> files) { HttpClient client=new DefaultHttpClient();// 开启一个客户端 HTTP 请求 HttpPost post = new HttpPost(url);//创建 HTTP POST 请求 MultipartEntityBuilder builder = MultipartEntityBuilder.create();// builder.setCharset(Charset.forName("uft-8"));//设置请求的编码格式 builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);//设置浏览器兼容模式 int count=0; for (File file:files) {// FileBody fileBody = new FileBody(file);//把文件转换成流对象FileBody// builder.addPart("file"+count, fileBody); builder.addBinaryBody("file"+count, file); count++; } builder.addTextBody("method", "upload");//设置请求参数 builder.addTextBody("fileTypes", ".pcap");//设置请求参数 HttpEntity entity = builder.build();// 生成 HTTP POST 实体 post.setEntity(entity);//设置请求参数 HttpResponse response = null; try { response = client.execute(post); } catch (ClientProtocolException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }// 发起请求 并返回请求的响应 if (response != null && response.getStatusLine().getStatusCode()==200) { return "上传成功"; } return "上传失败"; }
服务器要用到的jar包:
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version></dependency>
客户端要用到的jar包:
httpcore-4.3.2.jar
httpmime-4.3.5.jar
0 0
- 安卓开发多文件上传Spring MVC作为服务器端
- spring mvc 多文件上传
- spring mvc 多文件上传
- spring MVC 多文件上传
- spring mvc 多文件上传
- Spring MVC 多文件上传
- spring mvc 文件上传
- spring MVC 文件上传
- Spring MVC文件上传
- Spring MVC文件上传
- spring mvc 文件上传
- Spring mvc 文件上传
- spring mvc 文件上传
- spring mvc 上传文件
- spring mvc 上传文件
- spring mvc 文件上传
- spring mvc 上传文件
- spring mvc文件上传
- **浅述IOS成员变量(Member variables)和实例变量(Instance varialbes)的区别**
- WPF Layout 系统概述——Measure
- vmware workstation
- UDP简单通讯
- 日经春秋 20150811
- 安卓开发多文件上传Spring MVC作为服务器端
- 关于如何在Windows上生成dll库
- 打印保持到文件
- 黑马程序员--java技术blog---第一篇:其他对象
- web.xml配置session过期时间
- dfs模板
- 不依赖sendmail和postfix发邮件
- 20-02-其他对象API(Runtime类)
- CodeForces 569B Inventory 货物编号