WEB-Android两种方式实现文件上传


1、客户端上传文件
    
    WEB网页实现文件上传。
        主要有一条:设置enctype="multipart/form-data">
    
    Android实现文件上传。
        1、获取输入框中输入的手机上文件的路径.
            String filePath = et_file_path.getText().toString().trim();
        
        2、创建文件,并判断文件路径是否存在.
            File file = new File(filePath);
            if(!file.exists()){
                Toast.makeText(this,"文件不存在",0).show();
                return;
            }
                    
        3、准备好浏览器
            HttpClient client = new DefaultHttpClient();
        
        4、准备好要上传的文件-Part数组(可以支持多文件上传)和地址栏PostMethod
            Part [] parts = {new FilePart("file",file)};
            PostMethod postMethod = new PostMethod("http://192.168.1.10/login/LoginServlet");
            //这里的上传地址可以通过xml资源的形式配置:
            //String servlerurl = getResources().getString(R.String.serverurl);
        
        5、将数据放到地址栏中,并设置为enctype = multipart
            postMethod.setRequestEntity(new MultipartRequestEntity(parts,postMethod.getParams()));

        6、点击上传按钮,执行上传方法,得到响应码
            int code = client.executeMethod(postMethod);
        7、判断响应码并给出响应消息
            if (status == 200) {
                Toast.makeText(this, "上传文件成功", 0).show();
            } else {
                Toast.makeText(this, "上传文件失败", 0).show();
            }

 2、客户端接收文件上传。用到了apache的FileUpload组件。需要导入的jar包:
    commons-fileupload-***.jar
    commons-io-***.jar

    1、判断是不是满足:enctype="multipart/form-data",如果不是就得不到上传的文件。
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        
    2、得到处理上传内容的对象ServletFileUpload
        FileItemFactory  factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
    
    3、设置编码
        upload.setHeaderEncoding("utf-8");
    
    4、运用upload对象解析request请求,得到表单里的元素item
        List<FileItem> items = upload.parseRequest(request);
    
    5、循环遍历,如果是普通元素就打印,如果是文件就用item.write()写入到服务器的文件中
        for(FileItem item:items){
            if(item.isFormField()){
                String name1 = item.getFieldName();//得到请求参数的名称
                String value = item.getString("UTF-8");//得到参数值
                System.out.println(name1+ "="+ value);
            }else{
                item.write(new File(dir,filename));
            }
        }    

    <!#####################################################################################################!>
    
    Android客户端代码:
    public void uploadFile(View view) {
        String filepath = et_file_path.getText().toString().trim();
        File file = new File(filepath);
        if (!file.exists()) {
            Toast.makeText(this, "文件不存在", 0).show();
            return;
        }

        PostMethod filePost = null;
        try {
            Part[] parts = { new FilePart("file", file) };
            filePost = new PostMethod(getResources().getString(
                    R.string.serverurl));
            filePost.setRequestEntity(new MultipartRequestEntity(parts,
                    filePost.getParams()));
            HttpClient client = new HttpClient();
            
            int status = client.executeMethod(filePost);
            if (status == 200) {
                Toast.makeText(this, "上传文件成功", 0).show();
            } else {
                Toast.makeText(this, "上传文件失败", 0).show();
            }
        } catch (Exception e) {
            e.printStackTrace();
            Toast.makeText(this, "服务器异常", 0).show();
        } finally {
            filePost.releaseConnection();
        }
    }

    
    服务器端Servlet代码:
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if(isMultipart){
            String realpath = request.getSession().getServletContext().getRealPath("/files");
            System.out.println(realpath);
            File dir = new File(realpath);
            if(!dir.exists()) dir.mkdirs();
            
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);
            upload.setHeaderEncoding("UTF-8");
            try {
                List<FileItem> items = upload.parseRequest(request);
                for(FileItem item : items){
                    if(item.isFormField()){
                         String name1 = item.getFieldName();//得到请求参数的名称
                         String value = item.getString("UTF-8");//得到参数值
                         System.out.println(name1+ "="+ value);
                    }else{
                        item.write(new File(dir, System.currentTimeMillis()+ item.getName().substring(item.getName().lastIndexOf                        ("."))));
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }else{
            doGet(request, response);
        }
    }

你可能感兴趣的:(android,exception,String,upload,服务器,File)