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檔案依賴如下:
2 配置web.xml用以支援jersey,配置如下:<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.vi8</groupId> <artifactId>jerseyUploadDemo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <name>jerseyUploadDemo</name> <description> jersey上傳檔案DMEO </description> <properties> <endorsed.dir>${project.build.directory}/endorsed</endorsed.dir> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- Jersey --> <dependency> <groupId>org.glassfish.jersey.core</groupId> <artifactId>jersey-server</artifactId> <version>2.0</version> <type>jar</type> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-mvc-jsp</artifactId> <version>2.0</version> <type>jar</type> <scope>provided</scope> </dependency> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.0</version> <type>jar</type> <scope>provided</scope> </dependency> <!-- 上傳檔案需要該依賴--> <dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-multipart</artifactId> <version>2.0</version> <scope>provided</scope> </dependency> <!-- 這個用於上傳檔案工具操作--> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.4</version> </dependency> <dependency> <groupId>javax</groupId> <artifactId>javaee-web-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <compilerArguments> <endorseddirs>${endorsed.dir}</endorseddirs> </compilerArguments> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.3</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.6</version> <executions> <execution> <phase>validate</phase> <goals> <goal>copy</goal> </goals> <configuration> <outputDirectory>${endorsed.dir}</outputDirectory> <silent>true</silent> <artifactItems> <artifactItem> <groupId>javax</groupId> <artifactId>javaee-endorsed-api</artifactId> <version>7.0</version> <type>jar</type> </artifactItem> </artifactItems> </configuration> </execution> </executions> </plugin> </plugins> </build> </project>
3 編寫上面web.xml用到的MyApplication.java 如下:<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <filter> <filter-name>JerseyFilter</filter-name> <filter-class>org.glassfish.jersey.servlet.ServletContainer</filter-class> <init-param> <param-name>javax.ws.rs.Application</param-name> <!--MyApplication.java jersey載入--> <param-value>com.vi8.upload.MyApplication</param-value> </init-param> <init-param> <param-name>jersey.config.servlet.filter.staticContentRegex</param-name> <param-value>/(img|css|js|font)/.*</param-value> </init-param> <init-param> <param-name>jersey.config.servlet.filter.forwardOn404</param-name> <param-value>true</param-value> </init-param> <init-param> <param-name>jersey.config.server.mvc.templateBasePath.jsp</param-name> <param-value>/WEB-INF/pages</param-value> </init-param> </filter> <filter-mapping> <filter-name>JerseyFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
以上步驟基本就是jersey執行環境準備工作,接下開始討論檔案如何上傳的。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檔案上傳:
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; /** * qq : 845885222 * * @author Administrator */ @Path("upload") public class UploadImageResource { /** * Constants operating with 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 {@link 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檔案
<form action="${pageContext.request.contextPath}/upload/uploadimage2" method="post" enctype="multipart/form-data"> <p> 檔案 :<input type="file" name="file"/><br /> 使用者名稱: <input type="text" name="username"/><br /> </p> <input type="submit" value="上傳" /> </form>
結果如下
最後貼上測試程式碼 在測試程式碼中會上面列出的有點出入.主要是顯示使用Viewable 實現:
1 程式碼託管在此:
3 當然如果下載連結失效,你還可以加入qq群: 438394076 討論
相關推薦
Java上帝之眼系列配置Spring專案檔案上傳兩種方式(全解析)
歡迎檢視Java開發之上帝之眼系列教程,如果您正在為Java後端龐大的體系所困擾,如果您正在為各種繁出不窮的技術和各種框架所迷茫,那麼本系列文章將帶您窺探Java龐大的體系。本系列教程希望您能站在上帝
jersey 檔案上傳-使用兩種不同的方式
在該文件中,我將帶領大家使用基於JAX-RS REST風格的實現Jersey來上傳檔案到伺服器制定的資料夾,如果是圖片並讀取顯示出該圖片。 準備工作: 準備一個form表單,有兩個欄位,一個是type="file"和type="text",並且表單需要使用POST方式
頭像截圖上傳兩種方式(SWFUpload、一個簡單易用的flash外掛)
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http:
php圖片上傳兩種方式base64與file
首先介紹大家熟知的form表單提交(file)方式: <!DOCTYPE html> <html> <head> <meta charset="UTF-
使用 awk 生產表的兩種不同方式
使用 awk 生產表的兩種不同方式 awk 可以用於解決重複性高的任務,核心在於使用 awk 來批量的生成需要的表。這裡的表既可以是特定的格式設定,如圖形介面中的 style ,也可以是程式碼或者其它。 這裡我以圖形介面中的 style 為例。 當我需要對多個功能不同,操作方
兩種不同方式解決八皇后問題
問題描述 八皇后問題是一個以國際象棋為背景的問題:如何能夠在8×8的國際象棋棋盤上放置八個皇后,使得任何一個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。 解決思路 這個問題可以有兩種解決方法,一種是使用遞
PHP二維數組合並的兩種不同方式
第一種合併方式: 通過PHP的陣列API給出的array_merge方法來合併一個數組 程式碼: $a = array(array("1","2"),array("
檔案上傳五種方法對比
檔案上傳 這裡參考阮一峰老師的部落格,原文寫於2012年,現在需要不斷學習新東西。 早期不同檔案上傳瀏覽器相容性不好。現在HTML5出現後有了統一的介面。 1、早期 form 表單同步上傳 <form id="upload-form" action="upload.ph
springMVC檔案上傳以及用ajax方式提交
spring mvc上傳檔案的簡單例子,這有幾個需要注意的地方 1.form的enctype=”multipart/form-data” 這個是上傳檔案必須的 2.需要依賴的jar包(網上找) 具體程式碼: 1.spring的配置檔案 1)spring
kafka0.8版本和sparkstreaming整合的兩種不同方式
最近研究了不同kafka版本和sparkstreaming整合時的區別,整理如下 1- kafka-0.8.2以上kafka-0.10以下 一種是基於receiver的,一種是沒有receiver的,兩種不同的方式有不同的程式設計模型、效能特徵
java 位運算中移動位數超過資料長度和右移的兩種不同方式
記錄 java 位運算中的兩點注意事項:移動位數超過資料長度和右移的兩種不同方式。 int、long型別資料移動等於或超過最大位數 在 java 中,int 型別的資料長度為 32 位,如果將 int 型別左移或者右移大於或等於 32 位時,並不會像預計
fastDFS+LibreOffice多檔案上傳(二)後端部分:檔案資訊轉json字串儲存資料庫(Gson和org.json兩種方式)
需要注意的地方: 1)如果你複製我的程式碼到你的程式上報錯,可以看看我第一篇文章實體類跟配置檔案的設定:https://blog.csdn.net/qq_36688143/article/details/84162924 第二篇檔案上傳前端頁面的程式碼: https://blog.c
AspNetCore 檔案上傳(模型繫結、Ajax) 兩種方式 get到了嗎?
就目前來說,ASP.NET Core2.1了,已經相當成熟了,希望下個專案爭取使用吧!! 上傳檔案的三種方式("我會的,說不定還有其他方式") 模型繫結 Ajax WebUploader 一。模型繫結 官方機器翻譯的地址:https://docs.microsoft.com/en-us
springmvc和servlet下的檔案上傳和下載(存檔案目錄和存資料庫Blob兩種方式)
專案中涉及了檔案的上傳和下載,以前在struts2下做過,今天又用springmvc做了一遍,發現springmvc封裝的特別好,基本不用幾行程式碼就完成了,下面把程式碼貼出來: FileUpAndDown.jsp <%@ page language="java"
Java檔案上傳的兩種方式(uploadify和Spring預設方式)
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%@ include file="../jsp/include/taglibs.jsp"%> <!DOCTY
C# webapi 檔案流 stream 兩種上傳方式《第一部分 檔案流》
部落格僅用於記錄工作學習中遇到的坑,歡迎交流! 1.檔案流 1.1 客戶端 從上傳元件中獲取InputStream,轉換為byte[],組裝物件上傳 try{ byte[] buffer = new byte[filedata.InputStream.Le
java檔案上傳的兩種方式的一些問題
接觸到一個專案,一個java web專案,據說是十幾年的寫的程式碼,現在打算做新版本,先要我們專案組解決一下就版本程式碼裡面的bug,以便現在的日常使用。 主要的bug是檔案上傳失敗 打斷點跟蹤了一下,發現了問題:SpringMVC中servletFileUpload.p
檔案上傳的幾種方式
一、springmvc中的檔案上傳 1.配置檔案 (1).pom檔案,檔案上傳主要需要如下幾個jar包 <dependency> <groupId>org.springframework</groupId>
web 檔案上傳的幾種方式
問題 檔案上傳在WEB開發中應用很廣泛。 檔案上傳是指將本地圖片、視訊、音訊等檔案上傳到伺服器上,可以供其他使用者瀏覽或下載的過程。 以下總結了常見的檔案(圖片)上傳的方式和要點處理。 表單上傳 這是傳統的form表單上傳,使用form表單的input[type=”file”]控制元
HTML5 檔案上傳的2種方式
以前上傳檔案需要提交Form表單。 HTML5方式上傳檔案,可以通過使用FormData類模擬Form表單提交,從而實現無重新整理上傳檔案。 假設有一個檔案選擇框 <input type="file" name="pic" id="pic" accept="i