热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于Java中两种jersey文件上传方式

这篇文章主要介绍了基于Java中两种jersey文件上传方式的相关资料,需要的朋友可以参考下本文将带领大家使用基于JAX-RSREST风格的实现Jersey来上传文件到服务器制定的

这篇文章主要介绍了基于Java中两种jersey文件上传方式的相关资料,需要的朋友可以参考下

本文将带领大家使用基于JAX-RS REST风格的实现Jersey来上传文件到服务器制定的文件夹,如果是图片并读取显示出该图片。

准备工作:准备一个form表单,有两个字段,一个是type=”file”和type=”text”,并且表单需要使用POST方式提交。注意改表单需要使用multipart/form-data。该项目使用netbeans8.0和glassfish4.0开发和运行。并且使用maven管理该工程;需要在您的C盘建立一个文件夹,用来存储上传的文件。如C:\Newsportal\article_images开发环境:1 创建工程 在你项目空白处右键-》点击新建项目

            

2 在创建的项目中选择maven-》点击右侧web应用程序

3 填写工程的名字和maven的组ID和包名

4 选择该项目的运行环境为服务器Glassfish server

5 最后点击完成
准备搭建jersey的运行环境:
1 配置maven需要依赖包,maven的pom文件依赖如下:
 
 
    4.0.0 
    com.vi8 
    jerseyUploadDemo 
    1.0-SNAPSHOT 
    war 
    jerseyUploadDemo 
     
    jersey上传文件DMEO 
     
     
    ${project.build.directory}/endorsed 
    UTF-8 
     
     
     
     
        org.glassfish.jersey.core 
        jersey-server 
        2.0 
        jar 
        provided 
     
     
        org.glassfish.jersey.ext 
        jersey-mvc-jsp 
        2.0 
        jar 
        provided 
     
     
        org.glassfish.jersey.media 
        jersey-media-json-jackson 
        2.0 
        jar 
        provided 
     
     
     
        org.glassfish.jersey.media 
        jersey-media-multipart 
        2.0 
        provided 
     
     
     
        commons-io 
        commons-io 
        2.4 
     
     
     
        javax 
        javaee-web-api 
        7.0 
        provided 
     
     
 
     
     
         
        org.apache.maven.plugins 
        maven-compiler-plugin 
        3.1 
         
            1.7 
            1.7 
             
            ${endorsed.dir} 
             
         
         
         
        org.apache.maven.plugins 
        maven-war-plugin 
        2.3 
         
            false 
         
         
         
        org.apache.maven.plugins 
        maven-dependency-plugin 
        2.6 
         
             
            validate 
             
                copy 
             
             
                ${endorsed.dir} 
                true 
                 
                 
                    javax 
                    javaee-endorsed-api 
                    7.0 
                    jar 
                 
                 
             
             
         
         
     
     
 
2 配置web.xml用以支持jersey,配置如下:
 
 
     
    JerseyFilter 
    org.glassfish.jersey.servlet.ServletContainer 
     
        javax.ws.rs.Application 
         
        com.vi8.upload.MyApplication 
     
     
        jersey.config.servlet.filter.staticContentRegex 
        /(img|css|js|font)/.* 
     
     
        jersey.config.servlet.filter.forwardOn404 
        true 
     
     
        jersey.config.server.mvc.templateBasePath.jsp 
        /WEB-INF/pages 
     
     
     
    JerseyFilter 
    /* 
     
     
    index.jsp 
     
 
3 编写上面web.xml用到的MyApplication.java 如下:
package com.vi8.upload; 
 
import javax.ws.rs.ApplicationPath; 
import org.glassfish.jersey.jackson.JacksonFeature; 
import org.glassfish.jersey.media.multipart.MultiPartFeature; 
import org.glassfish.jersey.server.ResourceConfig; 
import org.glassfish.jersey.server.mvc.jsp.JspMvcFeature; 
 
/**
 * qq: [email protected]
 *
 * @author Administrator
 */ 
@ApplicationPath(“/”) 
public class MyApplication extends ResourceConfig { 
 
    public MyApplication() { 
    packages(“com.vi8.upload.resources”); 
    register(JspMvcFeature.class); 
    register(JacksonFeature.class); 
    register(MultiPartFeature.class); 
    } 

以上步骤基本就是jersey运行环境准备工作,接下开始讨论文件如何上传的。
jersey文件上传:
1 文件上传的Resource类,你可以理解是spring mvc中控制器。UploadImageResource.java清单代码
package com.vi8.upload.resources; 
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.OutputStream; 
import java.io.UnsupportedEncodingException; 
import java.util.Calendar; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.servlet.http.HttpServletResponse; 
import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.PathParam; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import org.apache.commons.io.FileUtils; 
import org.glassfish.jersey.media.multipart.ContentDisposition; 
import org.glassfish.jersey.media.multipart.FormDataBodyPart; 
import org.glassfish.jersey.media.multipart.FormDataContentDisposition; 
import org.glassfish.jersey.media.multipart.FormDataMultiPart; 
import org.glassfish.jersey.media.multipart.FormDataParam; 

@Path(“upload”) 
public class UploadImageResource { 
 
    /**
     * Constants operating w来源gaodaimacom搞#^代%!码&网ith images
     */ 
    private static final String ARTICLE_IMAGES_PATH = “c:/Newsportal/article_images/”; 
    private static final String JPG_CONTENT_TYPE = “image/jpeg”; 
    private static final String PNG_CONTENT_TYPE = “image/png”; 
 
    /**
     * 第一种方式上传
     *
     * @param fileInputStream
     * @param disposition
     * @return
     */ 
    @POST 
    @Path(“uploadimage1 “) 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public String uploadimage1(@FormDataParam(“file”) InputStream fileInputStream, 
        @FormDataParam(“file”) FormDataContentDisposition disposition) { 
    String imageName = Calendar.getInstance().getTimeInMillis() 
        + disposition.getFileName(); 
 
    File file = new File(ARTICLE_IMAGES_PATH + imageName); 
    try { 
        //使用common io的文件写入操作 
        FileUtils.copyInputStreamToFile(fileInputStream, file); 
        //原来自己的文件写入操作 
        //saveFile(fileInputStream, file); 
    } catch (IOException ex) { 
        Logger.getLogger(UploadImageResource.class.getName()).log(Level.SEVERE, null, ex); 
    } 
 
    return “images/” + imageName; 
    } 
 
    /**
     * *
     * 第二种方式上传 使用FormDataMultiPart 获取表单数据
     *
     * @param form
     * @param response
     * @return
     * @throws UnsupportedEncodingException
     */ 
    @POST 
    @Path(“uploadimage2”) 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    @Produces(MediaType.APPLICATION_JSON) 
    public String uploadimage2(FormDataMultiPart form, @Context HttpServletResponse response) throws UnsupportedEncodingException { 
    //获取文件流 
    FormDataBodyPart filePart = form.getField(“file”); 
    //获取表单的其他数据 
    FormDataBodyPart usernamePart = form.getField(“username”); 
 
    //ContentDisposition headerOfFilePart = filePart.getContentDisposition(); 
    //把表单内容转换成流 
    InputStream fileInputStream = filePart.getValueAs(InputStream.class); 
 
    FormDataContentDisposition formDataCOntentDisposition= filePart.getFormDataContentDisposition(); 
 
    String source = formDataContentDisposition.getFileName(); 
    String result = new String(source.getBytes(“ISO8859-1”), “UTF-8”); 
 
    System.out.println(“formDataContentDisposition.getFileName()result ” + result); 
 
    String filePath = ARTICLE_IMAGES_PATH + result; 
    File file = new File(filePath); 
    System.out.println(“file ” + file.getAbsolutePath()); 
    try { 
        //保存文件 
        FileUtils.copyInputStreamToFile(fileInputStream, file); 
//  saveFile(fileInputStream, file); 
    } catch (IOException ex) { 
        Logger.getLogger(UploadImageResource.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    System.out.println(“” + “images/” + result); 
 
    response.setCharacterEncoding(“UTF-8”); 
    return “images/” + result; 
    } 
 
    /**
     *
     * 不从web服务器去读图片,在磁盘某个目录的文件可以通过流的方式去获取 ,通过 response.getOutputStream()放回数据
     *
     * @param imageName image-name
     * @param type extension of image
     * @param response [email protected] HttpServletResponse}
     * @throws IOException
     */ 
    @GET 
    @Path(“/images/{name}.{type}”) 
    public void showImg(@PathParam(“name”) String imageName, 
        @PathParam(“type”) String type, 
        @Context HttpServletResponse response) 
        throws IOException { 
    System.out.println(“showImg”); 
    try (InputStream in = new FileInputStream(ARTICLE_IMAGES_PATH 
        + imageName + “.” + type)) { 
        FileUtils.copyFile(new File(ARTICLE_IMAGES_PATH + imageName + “.” + type), response.getOutputStream()); 
//      FileCopyUtils.copy(in, response.getOutputStream()); 
    } 
    } 
 
    // 保存文件信息到磁盘  
    private void saveFile(InputStream uploadedInputStream, File file) { 
    System.out.println(“——saveFile—–“); 
    try { 
        OutputStream outpuStream = new FileOutputStream(file); 
        int read = 0; 
        byte[] bytes = new byte[1024]; 
//      outpuStream = new FileOutputStream(new File(serverLocation)); 
        while ((read = uploadedInputStream.read(bytes)) != -1) { 
        outpuStream.write(bytes, 0, read); 
        } 
        outpuStream.flush(); 
        outpuStream.close(); 
    } catch (IOException e) { 
        e.printStackTrace(); 
    } 
    } 

2 当然要测试你也许还需要准备一个带有form表单的jsp文件
 
       

 
            文件 :
 
            用户名:
 
       

 
         
         

结果如下

以上就是本文的全部内容,希望对大家实现jersey文件上传有所帮助。

以上就是基于Java中两种jersey文件上传方式的详细内容,更多请关注gaodaima编程笔记其它相关文章!



推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Skywalking系列博客1安装单机版 Skywalking的快速安装方法
    本文介绍了如何快速安装单机版的Skywalking,包括下载、环境需求和端口检查等步骤。同时提供了百度盘下载地址和查询端口是否被占用的命令。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了如何使用iptables添加非对称的NAT规则段,以实现内网穿透和端口转发的功能。通过查阅相关文章,得出了解决方案,即当匹配的端口在映射端口的区间内时,可以成功进行端口转发。详细的操作步骤和命令示例也在文章中给出。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 移动端常用单位——rem的使用方法和注意事项
    本文介绍了移动端常用的单位rem的使用方法和注意事项,包括px、%、em、vw、vh等其他常用单位的比较。同时还介绍了如何通过JS获取视口宽度并动态调整rem的值,以适应不同设备的屏幕大小。此外,还提到了rem目前在移动端的主流地位。 ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
author-avatar
看人生愤怒
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有