t***@126.com
t***@126.com
  • 发布:2016-04-29 10:52
  • 更新:2016-04-29 10:52
  • 阅读:3049

上传 upload java后台写法 用的fileupload 传统的上传方法

分类:HBuilder

@POST
@Path("uploadvoice")
@Produces("test/plain")
public String imguploadvoice(@Context HttpServletRequest request,
@Context HttpServletResponse response) {

    String savePath = request.getSession().getServletContext()  
            .getRealPath("uploadImg");  
    // String savePath = "D://a";  
    File file = new File(savePath);  
    // 判断上传文件的保存目录是否存在  
    if (!file.exists() && !file.isDirectory()) {  
        System.out.println(savePath + "目录不存在,需要创建");  
        // 创建目录  
        file.mkdir();  
    }  
    // 消息提示  
    String message = "";  
    try {  
        // 使用Apache文件上传组件处理文件上传步骤:  
        // 1、创建一个DiskFileItemFactory工厂  
        DiskFileItemFactory factory = new DiskFileItemFactory();  
        // 2、创建一个文件上传解析器  
        ServletFileUpload upload = new ServletFileUpload(factory);  
        // 解决上传文件名的中文乱码  
        upload.setHeaderEncoding("UTF-8");  
        // 3、判断提交上来的数据是否是上传表单的数据  
        if (!ServletFileUpload.isMultipartContent(request)) {  
            // 按照传统方式获取数据  
            return null;  
        }  
        // 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项  
        List<FileItem> list = upload.parseRequest(request);  
        for (FileItem item : list) {  
            // 如果fileitem中封装的是普通输入项的数据  
            if (item.isFormField()) {  
                String name = item.getFieldName();  
                // 解决普通输入项的数据的中文乱码问题  
                String value = item.getString("UTF-8");  
                // value = new String(value.getBytes("iso8859-1"),"UTF-8");  
                System.out.println(name + "=" + value);  
            } else {// 如果fileitem中封装的是上传文件  
                // 得到上传的文件名称,  
                String filename = item.getName();  
                System.out.println(filename);  
                if (filename == null || filename.trim().equals("")) {  
                    continue;  
                }  
                Date date = new Date();  

                SimpleDateFormat sFormat = new SimpleDateFormat(  
                        "yyyyMMddHHmmss");  
                String dimg = sFormat.format(date)  
                        + (int) (1 + Math.random() * 10)  
                        + (int) (1 + Math.random() * 10)  
                        + (int) (1 + Math.random() * 10) + ".mp3";  

                // 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如:  
                // c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt  
                // 处理获取到的上传文件的文件名的路径部分,只保留文件名部分  

                // 获取item中的上传文件的输入流  
                InputStream in = item.getInputStream();  
                // 创建一个文件输出流  
                FileOutputStream out = new FileOutputStream(savePath + "\\"  
                        + dimg);  
                // 创建一个缓冲区  
                byte buffer[] = new byte[1024];  
                // 判断输入流中的数据是否已经读完的标识  
                int len = 0;  
                // 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据  
                while ((len = in.read(buffer)) > 0) {  
                    // 使用FileOutputStream输出流将缓冲区的数据写入到指定的目录(savePath + "\\"  
                    // + filename)当中  
                    out.write(buffer, 0, len);  
                }  
                // 关闭输入流  
                in.close();  
                // 关闭输出流  
                out.close();  
                // 删除处理文件上传时生成的临时文件  
                item.delete();  
                message = "文件上传成功!";  
            }  
        }  

    } catch (Exception e) {  
        message = "文件上传失败!";  
        e.printStackTrace();  
    }  
    // /-------------  
    return “”;  
}
2016-04-29 10:52 负责人:无 分享
已邀请:

该问题目前已经被锁定, 无法添加新回复