บทความนี้จะนำคุณให้ใช้ Jersey ตามการใช้งาน JAX-RS REST Style เพื่ออัปโหลดไฟล์ไปยังโฟลเดอร์ที่กำหนดโดยเซิร์ฟเวอร์ ถ้าเป็นรูปภาพและอ่านเพื่อแสดงภาพ
การเตรียมการ: เตรียมแบบฟอร์มที่มีสองฟิลด์หนึ่งคือ type = "ไฟล์" และ type = "text" และต้องส่งแบบฟอร์มโดยใช้โพสต์ โปรดทราบว่าจำเป็นต้อง multipart/form-data เพื่อแก้ไขแบบฟอร์ม โครงการได้รับการพัฒนาและดำเนินการโดยใช้ NetBeans8.0 และ Glassfish4.0 และใช้ Maven เพื่อจัดการโครงการ คุณต้องสร้างโฟลเดอร์บนไดรฟ์ C ของคุณเพื่อจัดเก็บไฟล์ที่อัปโหลด ตัวอย่างเช่น C:/Newsportal/article_images การพัฒนาสภาพแวดล้อม: 1 สร้างโครงการและคลิกขวาที่พื้นที่ว่างของโครงการของคุณ -> คลิกเพื่อสร้างโครงการใหม่
2 เลือก Maven-》 คลิกเว็บแอปพลิเคชันทางด้านขวา
3 กรอกชื่อโครงการและรหัสกลุ่ม Maven และชื่อแพ็คเกจ
4 เลือกสภาพแวดล้อมการทำงานของโครงการเป็นเซิร์ฟเวอร์เซิร์ฟเวอร์ Glassfish
5 ในที่สุดคลิกเพื่อให้เสร็จสมบูรณ์และเตรียมที่จะสร้างสภาพแวดล้อมการทำงานของเจอร์ซีย์:
1 ในการกำหนดค่า Maven คุณต้องพึ่งพาแพ็คเกจ การพึ่งพาไฟล์ Maven Pom มีดังนี้:
<? 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:/MANCMMMMMMMMMMMMMMMMMMMMMMMMMMBM http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<SodelVersion> 4.0.0 </StremVersion>
<RoupID> com.vi8 </roupid>
<ArtIfactId> jerseyuploaddemo </artifactid>
<Sersion> 1.0-SNAPSHOT </Sersion>
<Cackaging> สงคราม </packaging>
<name> jerseyuploaddemo </name>
<Scription>
Jersey อัปโหลดไฟล์ dmeo
</คำอธิบาย>
<คุณสมบัติ>
<endorsed.dir> $ {project.build.directory}/รับรอง <//endorsed.dir>
<project.build.sourceencoding> UTF-8 </project.build.sourceencoding>
</properties>
<การพึ่งพา>
<!-เจอร์ซีย์->
<การพึ่งพา>
<RoupID> org.glassfish.jersey.core </groupId>
<ArtIfactId> Jersey-Server </artifactId>
<Sersion> 2.0 </Sersion>
<ply> jar </type>
<cope> ให้ </pope>
</dermentency>
<การพึ่งพา>
<RoupID> org.glassfish.jersey.ext </groupId>
<ArtIfactId> jersey-mvc-jsp </artifactid>
<Sersion> 2.0 </Sersion>
<ply> jar </type>
<cope> ให้ </pope>
</dermentency>
<การพึ่งพา>
<RoupID> org.glassfish.jersey.media </roupid>
<ArtIfactId> Jersey-Media-Json-Jackson </artifactid>
<Sersion> 2.0 </Sersion>
<ply> jar </type>
<cope> ให้ </pope>
</dermentency>
<!-การพึ่งพานี้จำเป็นต้องอัปโหลดไฟล์->
<การพึ่งพา>
<RoupID> org.glassfish.jersey.media </roupid>
<ArtIfactId> Jersey-Media-multipart </artifactid>
<Sersion> 2.0 </Sersion>
<cope> ให้ </pope>
</dermentency>
<!-ใช้สำหรับการทำงานของเครื่องมืออัปโหลดไฟล์->
<การพึ่งพา>
<RoupID> Commons-io </GroupID>
<ArtIfactId> Commons-io </artifactid>
<Sersion> 2.4 </Sersion>
</dermentency>
<การพึ่งพา>
<RoupID> Javax </GroupID>
<ArtIfactId> Javaee-Web-Api </artifactid>
<Sersion> 7.0 </Sersion>
<cope> ให้ </pope>
</dermentency>
</dependencies>
<uffle>
<ปลั๊กอิน>
<ปลั๊กอิน>
<RoupID> org.apache.maven.plugins </groupId>
<ArtIfactId> maven-compiler-plugin </artifactid>
<Sersion> 3.1 </Sersion>
<การกำหนดค่า>
<source> 1.7 </source>
<source> 1.7 </sourced>
<CompilerArguments>
<DerdorSedDirs> $ {endorsed.dir} </derdorsedDirs>
</pilerarguments>
</การกำหนดค่า>
</ปลั๊กอิน>
<ปลั๊กอิน>
<RoupID> org.apache.maven.plugins </groupId>
<ArtIfactId> Maven-War-Plugin </artifactid>
<Sersion> 2.3 </Sersion>
<การกำหนดค่า>
<failonmissingwebxml> false </failonmissingwebxml>
</การกำหนดค่า>
</ปลั๊กอิน>
<ปลั๊กอิน>
<RoupID> org.apache.maven.plugins </groupId>
<ArtIfactId> maven-dependency-plugin </artifactid>
<Sersion> 2.6 </Sersion>
<การประหารชีวิต>
<ดำเนินการ>
<pare> ตรวจสอบ </pepare>
<เป้าหมาย>
<goal> คัดลอก </goal>
</source>
<การกำหนดค่า>
<EutputDirectory> $ {endorsed.dir} </utputDirectory>
<Silent> True </Silent>
<artifactitems>
<ArtIfactItem>
<RoupID> Javax </GroupID>
<ArtIfactId> Javaee-endorsed-Api </artifactid>
<Sersion> 7.0 </Sersion>
<ply> jar </type>
</artifactitem>
</artifactitems>
</การกำหนดค่า>
</Execution>
</การประหารชีวิต>
</ปลั๊กอิน>
</ปลั๊กอิน>
</build>
</project>
2 กำหนดค่า web.xml เพื่อรองรับเสื้อและกำหนดค่าดังนี้:
<? 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"
<ฟิลเตอร์>
<Tilter-Name> jerseyfilter </filter-name>
<Filter-Class> org.glassfish.jersey.servlet.servletContainer </tilter-class>
<int-Param>
<param-name> javax.ws.rs.application </param-name>
<!-myapplication.java เจอร์ซีย์กำลังโหลด->
<param-value> com.vi8.upload.myapplication </param-value>
</init-param>
<int-Param>
<param-name> jersey.config.servlet.filter.staticcontentregex </param-name>
<param- value>/(img | css | js | font) /.* </param- value>
</init-param>
<int-Param>
<param-name> jersey.config.servlet.filter.forwardon404 </param-name>
<param- value> True </param- value>
</init-param>
<int-Param>
<param-name> jersey.config.server.mvc.templatebasepath.jsp </param-name>
<param- value>/web-inf/pages </param- value>
</init-param>
</tilter>
<ฟิลเตอร์ทำแผนที่>
<Tilter-Name> jerseyfilter </filter-name>
<url-pattern>/*</url-pattern>
</ตัวกรองการทำแผนที่>
<ยินดีต้อนรับไฟล์-ลิสต์>
<welcome-file> index.jsp </welcome-file>
</ยินดีต้อนรับไฟล์-ลิสต์>
</eb-app>
3 เขียน myapplication.java ที่ใช้ใน web.xml ด้านบนดังนี้:
แพ็คเกจ com.vi8.upload;
นำเข้า javax.ws.rs.applicationpath;
นำเข้า org.glassfish.jersey.jackson.jacksonfeature;
นำเข้า org.glassfish.jersey.media.multipart.multipartfeature;
นำเข้า org.glassfish.jersey.server.resourceconfig;
นำเข้า org.glassfish.jersey.server.mvc.jsp.jspmvcfeature;
-
* qq: [email protected]
-
* @author Administrator
-
@ApplicationPath ("/")
MyApplication คลาสสาธารณะขยาย ResourceConfig {
public myapplication () {
แพ็คเกจ ("com.vi8.upload.resources");
ลงทะเบียน (jspmvcfeature.class);
ลงทะเบียน (jacksonfeature.class);
ลงทะเบียน (MultipartFeature.class);
-
-
ขั้นตอนข้างต้นนั้นเป็นการเตรียมการสำหรับสภาพแวดล้อมการทำงานของเจอร์ซีย์และจากนั้นเราจะเริ่มพูดคุยเกี่ยวกับวิธีการอัปโหลดไฟล์
การอัปโหลดไฟล์ Jersey:
1 คลาสทรัพยากรที่อัปโหลดโดยไฟล์คุณสามารถเข้าใจได้ว่าเป็นคอนโทรลเลอร์ใน Spring MVC Uploadimageresource.java Manifest Code
แพ็คเกจ com.vi8.upload.resources;
นำเข้า Java.io.File;
นำเข้า Java.io.FileInputStream;
นำเข้า Java.io.FileOutputStream;
นำเข้า java.io.ioException;
นำเข้า Java.io.InputStream;
นำเข้า Java.io.OutputStream;
นำเข้า java.io.unsupportencodingexception;
นำเข้า Java.util.Calendar;
นำเข้า java.util.logging.level;
นำเข้า java.util.logging.logger;
นำเข้า Javax.servlet.http.httpservletResponse;
นำเข้า Javax.ws.rs.consumes;
นำเข้า Javax.ws.rs.get;
นำเข้า javax.ws.rs.post;
นำเข้า Javax.ws.rs.path;
นำเข้า javax.ws.rs.pathparam;
นำเข้า javax.ws.rs.produces;
นำเข้า javax.ws.rs.core.context;
นำเข้า Javax.ws.rs.core.mediatype;
นำเข้า org.apache.commons.io.fileutils;
นำเข้า org.glassfish.jersey.media.multipart.ContentDisposition;
นำเข้า org.glassfish.jersey.media.multipart.formdatabodypart;
นำเข้า org.glassfish.jersey.media.multipart.formdatacontentdisposition;
นำเข้า org.glassfish.jersey.media.multipart.formdatamultipart;
นำเข้า org.glassfish.jersey.media.multipart.formdataparam;
@Path ("อัปโหลด")
คลาสสาธารณะ Uploadimageresource {
-
* ค่าคงที่ที่ทำงานกับรูปภาพ
-
สตริงสุดท้ายคงที่ส่วนตัวบทความ _images_path = "c:/newsportal/article_images/";
สตริงสุดท้ายคงที่ส่วนตัว jpg_content_type = "image/jpeg";
สตริงสุดท้ายคงที่ส่วนตัว png_content_type = "image/png";
-
* วิธีแรกในการอัปโหลด
-
* @param fileInputStream
* @param disposition
* @กลับ
-
@โพสต์
@Path ("UploadImage1")
@consumes (mediaType.multipart_form_data)
สตริงสาธารณะ uploadImage1 (@FormDataparam ("ไฟล์") inputStream fileInputStream
@FormDataparam ("ไฟล์") การจัดการ formDataContentDisposition) {
String imageName = Calendar.getInstance (). getTimeInmillis ()
+ disposition.getFilename ();
ไฟล์ไฟล์ = ไฟล์ใหม่ (บทความ _images_path + imageName);
พยายาม {
// ใช้การดำเนินการเขียนไฟล์ IO ทั่วไป
fileutils.copyInputStreamTofile (fileInputStream, ไฟล์);
// ปรากฎว่าการดำเนินการเขียนไฟล์ของฉันเอง
// saveFile (fileInputStream, ไฟล์);
} catch (ioexception ex) {
logger.getLogger (uploadimageresource.class.getName ()). log (level.severe, null, ex);
-
ส่งคืน "images/" + imageName;
-
-
-
* วิธีที่สองในการอัปโหลดและใช้ formDatamultipart เพื่อรับข้อมูลแบบฟอร์ม
-
* @param แบบฟอร์ม
* @param การตอบกลับ
* @กลับ
* @throws unsupportencodingexception
-
@โพสต์
@Path ("UploadImage2")
@consumes (mediaType.multipart_form_data)
@produces (mediaType.application_json)
สตริงสาธารณะ uploadimage2 (แบบฟอร์ม FormDatamultipart, @context httpservletResponse การตอบสนอง) โยน unsupportencodingexception {
// รับสตรีมไฟล์
formDatabodyPart filePart = form.getField ("ไฟล์");
// รับข้อมูลอื่น ๆ ของแบบฟอร์ม
FormDatabodyPart USERNAMEPART = Form.getField ("ชื่อผู้ใช้");
// contentDisposition headerOffilePart = filepart.getContentDisposition ();
// แปลงเนื้อหาแบบฟอร์มเป็นสตรีม
inputStream fileInputStream = filepart.getValueas (inputStream.class);
FormDatacontentDisposition FormDatacontentDisposition = filepart.getFormDatacontEntEntEnsInd ();
แหล่งที่มาของสตริง = formDatacontentDisposition.getFilename ();
สตริงผลลัพธ์ = สตริงใหม่ (source.getBytes ("ISO8859-1"), "UTF-8");
System.out.println ("formDatacontentDisposition.getFilename () ผลลัพธ์" + ผลลัพธ์);
String filePath = article_images_path + ผลลัพธ์;
ไฟล์ไฟล์ = ไฟล์ใหม่ (filePath);
System.out.println ("ไฟล์" + file.getabsolutepath ());
พยายาม {
// บันทึกไฟล์
fileutils.copyInputStreamTofile (fileInputStream, ไฟล์);
// saveFile (fileInputStream, ไฟล์);
} catch (ioexception ex) {
logger.getLogger (uploadimageresource.class.getName ()). log (level.severe, null, ex);
-
System.out.println ("" + "รูปภาพ/" + ผลลัพธ์);
Response.Setcharacterencoding ("UTF-8");
ส่งคืน "ภาพ/" + ผลลัพธ์;
-
-
-
* อย่าอ่านรูปภาพจากเว็บเซิร์ฟเวอร์ ไฟล์ในไดเรกทอรีบางอย่างบนดิสก์สามารถรับได้ผ่านสตรีมและนำข้อมูลกลับผ่านการตอบสนอง getOutputStream ()
-
* @param imagename image-name
* @param ประเภทส่วนขยายของภาพ
* @param Response {@link httpservletResponse}
* @throws ioexception
-
@รับ
@Path ("/images/{name}. {type}")
โมฆะสาธารณะ showimg (@pathparam ("ชื่อ") imagename, imagename,
@PathParam ("ประเภท") ประเภทสตริง
@Context httpservletResponse)
โยน ioexception {
System.out.println ("showimg");
ลอง (inputStream in = new fileInputStream (article_images_path
+ imagename + "." + ประเภท)) {
fileutils.copyfile (ไฟล์ใหม่ (บทความ _images_path + imageName + "." + type), response.getOutputStream ());
// fileCopyutils.copy (in, response.getOutputStream ());
-
-
// บันทึกข้อมูลไฟล์ไปยังดิสก์
Void Private Void SaveFile (InputStream uploadedInputStream ไฟล์ไฟล์) {
System.out.println ("------- SaveFile -----");
พยายาม {
outputStream outputPustream = ใหม่ fileOutputStream (ไฟล์);
int read = 0;
ไบต์ [] ไบต์ = ไบต์ใหม่ [1024];
// outputStream = ใหม่ fileOutputStream (ไฟล์ใหม่ (ServerLocation));
ในขณะที่ ((read = uploadedInputStream.read (ไบต์))! = -1) {
Outpustream.write (ไบต์, 0, อ่าน);
-
outputstream.flush ();
Outpustream.close ();
} catch (ioexception e) {
E.PrintStackTrace ();
-
-
-
2 แน่นอนเพื่อทดสอบคุณอาจต้องเตรียมไฟล์ JSP ด้วยแบบฟอร์มแบบฟอร์ม
<form action = "$ {pageContext.request.contextpath}/upload/uploadimage2" method = "post" enctype = "multipart/form-data">
<p>
ไฟล์: <อินพุต type = "file" name = "file" /> <br />
ชื่อผู้ใช้: <อินพุต type = "text" name = "username" /> <br />
</p>
<อินพุตประเภท = "ส่ง" value = "อัปโหลด" />
</form>
ผลลัพธ์มีดังนี้
ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการอัพโหลดไฟล์ Jersey