分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

jersey+jetty实现文件上传

发布时间:2023-09-06 02:30责任编辑:傅花花关键词:文件上传

服务配置与启动类

import org.glassfish.jersey.servlet.ServletContainer;import javax.ws.rs.Path;import org.eclipse.jetty.server.Server;import org.eclipse.jetty.servlet.FilterHolder;import org.eclipse.jetty.servlet.ServletContextHandler;import org.eclipse.jetty.servlet.ServletHolder;import org.eclipse.jetty.servlets.CrossOriginFilter;/** * 功能:服务启动 * @author yuchong.shen * 2019年1月10日 * ?*/@Path("/")public class RestInterface { ???private void start(int port) throws Exception { ???????????????//设置扫描包及配置multipart ???????ServletHolder servletHolder = new ServletHolder(ServletContainer.class); ???????servletHolder.setInitParameter("jersey.config.server.provider.packages","yuchongshen.uploader"); ???????servletHolder.setInitParameter("jersey.config.server.provider.classnames","org.glassfish.jersey.media.multipart.MultiPartFeature"); ???????//servlet上下文 ????????ServletContextHandler servletContextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS); ????????servletContextHandler.addServlet(servletHolder, "/*"); ???????//解决前端跨域访问问题 ???????FilterHolder filterHolder = new FilterHolder(CrossOriginFilter.class); ???????filterHolder.setInitParameter("allowedOrigins", "*"); ???????filterHolder.setInitParameter("allowedMethods", "GET, POST"); ???????servletContextHandler.addFilter(filterHolder, "/*", null); ???????//创建服务 ???????Server server = new Server(Config.PORT); ???????server.setHandler(servletContextHandler); ???????server.start(); ???????????????System.out.println("******************************************************************"); ???????System.out.println("server has startup,port:"+Config.PORT); ???????System.out.println("server has startup,upload path:"+Config.UPLOAD_PATH); ???????System.out.println("******************************************************************"); ???} ???public static void main(String[] args) throws Exception { ???????int portIndex=0,uploadPathIndex=0; ???????for(int i=0;i<args.length;i++){ ???????????if(args[i].equals("-uploadpath")) uploadPathIndex=i+1;//获取上传路径根目录 ???????????if(args[i].equals("-port")) ??????portIndex=i+1;//获取端口号 ???????} ???????if(uploadPathIndex>0) Config.UPLOAD_PATH = args[uploadPathIndex]; ???????if(portIndex>0) ??????Config.PORT ???????= Integer.parseInt(args[portIndex]); ???????RestInterface server = new RestInterface(); ???????server.start(Config.PORT); ???}

编写上传服务类

import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.inject.Singleton;import javax.ws.rs.Consumes;import javax.ws.rs.POST;import javax.ws.rs.Path;import javax.ws.rs.WebApplicationException;import javax.ws.rs.core.MediaType;import org.glassfish.jersey.media.multipart.FormDataContentDisposition;import org.glassfish.jersey.media.multipart.FormDataParam;/** * 功能:处理上传 * @author yuchong.shen * 2019年1月10日 * ?*/@Path("/upload")@Singletonpublic class Uploader { ???@POST ???@Consumes({MediaType.MULTIPART_FORM_DATA}) ???public String ?uploadFile(@FormDataParam("file") InputStream fileInputStream, ?????????????????????????????@FormDataParam("file") FormDataContentDisposition fileMetaData, ?????????????????????????????@FormDataParam("path") String path, ?????????????????????????????@FormDataParam("file_name") String fileName) throws Exception ???{ ???????String postfix = fileMetaData.getFileName().substring(fileMetaData.getFileName().lastIndexOf(".")); ???????if(fileName==null){ ???????????fileName = new String(fileMetaData.getFileName().getBytes("iso8859-1"),"utf-8"); ???????}else{ ???????????fileName = fileName+postfix; ???????} ???????if(path==null) ???path = ""; ???????try ???????{ ???????????int read = 0; ???????????byte[] bytes = new byte[1024]; ????????????????OutputStream out = new FileOutputStream(new File(Config.UPLOAD_PATH+File.separatorChar +path+ File.separatorChar+fileName)); ???????????while ((read = fileInputStream.read(bytes)) != -1) ???????????{ ???????????????out.write(bytes, 0, read); ???????????} ???????????out.flush(); ???????????out.close(); ???????} catch (IOException e) ???????{ ???????????throw new WebApplicationException(); ???????} ???????return "uploaded successfully"; ???}}

相关依赖

<properties> ???????<jersey2.version>2.19</jersey2.version> ???????<jaxrs.version>2.0.1</jaxrs.version> ???</properties> ?????<dependencies> ???????<dependency> ???????????<groupId>junit</groupId> ???????????<artifactId>junit</artifactId> ???????????<version>3.8.1</version> ???????????<scope>test</scope> ???????</dependency> ????????<dependency> ???????????<groupId>org.eclipse.jetty</groupId> ???????????<artifactId>jetty-server</artifactId> ???????????<version>9.4.14.v20181114</version> ???????</dependency> ???????<dependency> ???????????<groupId>org.eclipse.jetty</groupId> ???????????<artifactId>jetty-servlets</artifactId> ???????????<version>9.4.14.v20181114</version> ???????</dependency> ???????<dependency> ???????????<groupId>org.eclipse.jetty</groupId> ???????????<artifactId>jetty-servlet</artifactId> ???????????<version>9.4.14.v20181114</version> ???????</dependency> ????????<!-- JAX-RS --> ???????<dependency> ???????????<groupId>javax.ws.rs</groupId> ???????????<artifactId>javax.ws.rs-api</artifactId> ???????????<version>${jaxrs.version}</version> ???????</dependency> ???????<!-- Jersey 2.19 --> ???????<dependency> ???????????<groupId>org.glassfish.jersey.containers</groupId> ???????????<artifactId>jersey-container-servlet</artifactId> ???????????<version>${jersey2.version}</version> ???????</dependency> ???????<dependency> ???????????<groupId>org.glassfish.jersey.core</groupId> ???????????<artifactId>jersey-server</artifactId> ???????????<version>${jersey2.version}</version> ???????</dependency> ???????<dependency> ???????????<groupId>org.glassfish.jersey.core</groupId> ???????????<artifactId>jersey-client</artifactId> ???????????<version>${jersey2.version}</version> ???????</dependency> ????????<dependency> ???????????<groupId>org.glassfish.jersey.media</groupId> ???????????<artifactId>jersey-media-multipart</artifactId> ???????????<version>2.19</version> ???????</dependency> ???</dependencies>

启动

maven打包执行

mvn package

进入target目录执行:

java -jar uploader-0.0.1-SNAPSHOT.jar

服务启动完毕,默认端口为8888,上传根目录为jar包所在目录

配置端口或上传根目录

启动时带参数,例如:

java -jar target/uploader-0.0.1-SNAPSHOT.jar -port 8777 -uploadpath C:\Users\yuchongshen\

访问

http://ip:端口/upload

restful api

前端使用post方法mulitpart/form_data

参数名类型 描述 
fileFile上传的文件
pathString上传在根目录下的哪个目录,必须事先创建
file_nameString上传文件改名

本人github

jersey+jetty实现文件上传

原文地址:https://www.cnblogs.com/shenyuchong/p/10291777.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved