安卓开发多文件上传Spring MVC作为服务器端

来源:互联网 发布:镇江淘宝模特兼职招聘 编辑:程序博客网 时间:2024/06/05 17:13

服务器端核心代码:

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
原创粉丝点击