ستقودك هذه المقالة إلى استخدام Jersey استنادًا إلى تطبيق نمط REST JAX-RS لتحميل الملفات إلى المجلدات التي صاغها الخادم. إذا كانت صورة وقراءتها لعرض الصورة.
التحضير: قم بإعداد نموذج نموذج مع حقلين ، واحد هو type = "ملف" و type = "text" ، ويجب إرسال النموذج باستخدام Post. لاحظ أن multipart/form-data مطلوب لتعديل النموذج. تم تطوير المشروع وتشغيله باستخدام NetBeans8.0 و Glassfish4.0. واستخدام Maven لإدارة المشروع ؛ تحتاج إلى إنشاء مجلد على محرك C لتخزين الملفات التي تم تحميلها. على سبيل المثال ، c:/newsportal/article_images بيئة التطوير: 1 قم بإنشاء مشروع وانقر بزر الماوس الأيمن على المساحة الفارغة لمشروعك -> انقر لإنشاء مشروع جديد
2 حدد maven-》 انقر فوق تطبيق الويب على اليمين
3 املأ اسم المشروع ومعرف مجموعة Maven واسم الحزمة
4 حدد البيئة الجارية للمشروع كخادم Server Glassfish
5 أخيرا انقر لإكمال والاستعداد لبناء بيئة تشغيل القميص:
1 لتكوين Maven ، تحتاج إلى الاعتماد على الحزمة. تبعيات ملف Maven POM هي كما يلي:
<؟
<project xmlns = "http://maven.apache.org/pom/4.0.0" http://maven.apache.org/xsd/maven-4.0.0.xsd ">
<DodelVersion> 4.0.0 </modelversion>
<roupl> com.vi8 </roughid>
<StifactId> jerseyuploaddemo </artifactid>
<splect> 1.0-snapshot </version>
<packaging> الحرب </packaging>
<name> jerseyuploaddemo </name>
<spection>
جيرسي تحميل ملف dmeo
</الوصف>
<Properties>
<arfored.dir> $ {project.build.directory}/arfered </endorsed.dir>
<project.build.sourceencoding> utf-8 </project.build.sourceencoding>
</properties>
<تبعيات>
<!-جيرسي->
<premency>
<roupl> org.glassfish.jersey.core </groupId>
<Stifactid> Jersey-Server </stifactid>
<splection> 2.0 </version>
<type> جرة </type>
<scope> المقدمة </scope>
</التبعية>
<premency>
<roupl> org.glassfish.jersey.ext </groupId>
<Stifactid> jersey-mvc-jsp </stifactid>
<splection> 2.0 </version>
<type> جرة </type>
<scope> المقدمة </scope>
</التبعية>
<premency>
<roupl> org.glassfish.jersey.media </groupId>
<StifactId> Jersey-Media-Json-Jackson </stifactid>
<splection> 2.0 </version>
<type> جرة </type>
<scope> المقدمة </scope>
</التبعية>
<!-هذا التبعية مطلوب لتحميل ملف->
<premency>
<roupl> org.glassfish.jersey.media </groupId>
<StifactId> Jersey-Media-Multipart </stifactid>
<splection> 2.0 </version>
<scope> المقدمة </scope>
</التبعية>
<!-يتم استخدام هذا لعملية تحميل الملفات->
<premency>
<roupl> commons-io </roughid>
<StifactId> Commons-Io </stifactid>
<splection> 2.4 </version>
</التبعية>
<premency>
<rouckid> javax </roughid>
<StifactId> javaee-web-api </stifactid>
<splex> 7.0 </sophy>
<scope> المقدمة </scope>
</التبعية>
</التبعيات>
<build>
<reclosins>
<lection>
<roupl> org.apache.maven.plugins </groupId>
<StifactId> maven-compiler-plugin </stifactid>
<splection> 3.1 </version>
<simpion>
<ancept> 1.7 </ource>
<Target> 1.7 </asplic>
<leplerArguments>
<IndorsedDirs> $ {arforted.dir} </endorsedDirs>
</المترجمات>
</configuration>
</plugin>
<lection>
<roupl> org.apache.maven.plugins </groupId>
<StifactId> maven-war-plugin </stifactid>
<splection> 2.3 </version>
<simpion>
<SailonMissingWebxml> false </failonMissingWebxMl>
</configuration>
</plugin>
<lection>
<roupl> org.apache.maven.plugins </groupId>
<StifactId> maven-dependency-plugin </stifactid>
<splection> 2.6 </version>
<xecutions>
<execution>
<phase> التحقق من صحة </phase>
<vispl>
<الهدف> نسخة </الهدف>
</الأهداف>
<simpion>
<DountedDirectory> $ {arforted.dir} </outputDirectory>
<ilits> صحيح </silent>
<StifactItems>
<StifactItem>
<rouckid> javax </roughid>
<StifactId> javaee-edorsed-api </stifactid>
<splex> 7.0 </sophy>
<type> جرة </type>
</stifactitem>
</artifactItems>
</configuration>
</execution>
</extensions>
</plugin>
</plugins>
</build>
</project>
2 تكوين web.xml لدعم جيرسي ، وتكوينه على النحو التالي:
<؟
<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
<filter>
<filter-name> jerseyfilter </filter-name>
<ilter-class> org.glassfish.jersey.servlet.servletContainer </filter-class>
<ish-param>
<Param-Name> javax.ws.rs.application </param-name>
<!-myapplication.java jersey loading->
<Param-value> com.vi8.upload.myapplication </param-value>
</init-param>
<ish-param>
<Param-Name> jersey.config.servlet.filter.staticContentRegex </param-name>
<param-value>/(img | css | js | font) /.* </param-value>
</init-param>
<ish-param>
<Param-Name> jersey.config.servlet.filter.forwardon404 </param-name>
<Param-value> true </param-value>
</init-param>
<ish-param>
<Param-Name> jersey.config.server.mvc.templateBasePath.jsp </param-name>
<Param-value>/web-inf/pages </param-value>
</init-param>
</ilter>
<filter mapping>
<filter-name> jerseyfilter </filter-name>
<url-pattern>/*</url-pattern>
</filter mapping>
<قائمة الترحيب>
<lisp-file> index.jsp </elverfile>
</قائمة الترحيب>
</web-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 {
myapplication العامة () {
حزم ("com.vi8.upload.resources") ؛
سجل (jspmvcfeature.class) ؛
التسجيل (jacksonfeature.class) ؛
التسجيل (multiRtfeature.class) ؛
}
}
الخطوات المذكورة أعلاه هي في الأساس إعداد بيئة تشغيل القميص ، وبعد ذلك سنبدأ في مناقشة كيفية تحميل الملف.
تحميل ملف جيرسي:
1 فئة الموارد التي تم تحميلها بواسطة الملف ، يمكنك أن تفهم أنها وحدة التحكم في Spring MVC. تحميل 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.unsupportedencodingException ؛
استيراد java.util.calendar ؛
استيراد java.util.logging.level ؛
استيراد java.util.logging.logger ؛
استيراد javax.servlet.http.httpservletresponse ؛
استيراد javax.ws.rs.censumes ؛
استيراد 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.mediatepe ؛
استيراد 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 ("تحميل")
الطبقة العامة تحميل imploadImagerEsource {
/**
* الثوابت تعمل مع الصور
*/
Static Static Final String article_images_path = "C:/NEFROPPORPPORTAL/article_images/" ؛
Static Final String JPG_CONTENT_TYPE = "Image/JPEG" ؛
Static Final String PNG_CONTENT_TYPE = "Image/PNG" ؛
/**
* الطريقة الأولى للتحميل
*
* param fileInputStream
* param التصرف
* @يعود
*/
@بريد
path ("TOPLOADIMAGE1")
consumes (MediaType.multipart_form_data)
السلسلة العامة exploadImage1 (@shorddataparam ("file") inputStream FileInputStream ،
@shomdataparam ("file") formDataContentDisposition disposition) {
سلسلة ImageName = calendar.getInstance (). getTimeInMillis ()
+ disposition.getFilename () ؛
ملف الملف = ملف جديد (article_images_path + imageName) ؛
يحاول {
// استخدم عملية كتابة ملف IO الشائعة
fileUtils.copyInputStreamTofile (fileInputStream ، ملف) ؛
// اتضح أن عملية كتابة الملفات الخاصة بي
// saveFile (fileInputStream ، file) ؛
} catch (ioException ex) {
logger.getLogger (UploadImagerEsource.class.getName ()). log (level.severe ، null ، ex) ؛
}
إرجاع "الصور/" + ImageName ؛
}
/**
* *
* الطريقة الثانية لتحميل واستخدام formDatamultipart للحصول على بيانات النموذج
*
* param نموذج
* param استجابة
* @يعود
* Throws UnsupportedEncodingException
*/
@بريد
path ("TOPLOADIMAGE2")
consumes (MediaType.multipart_form_data)
produces (MediaType.application_json)
السلسلة العامة exploadImage2 (نموذج formDatamultipart ، context httpservletresponse) يلقي UnsupportedEncodingException {
// الحصول على دفق الملف
formDatabodyPart filePart = form.getfield ("file") ؛
// احصل على بيانات أخرى للنموذج
formDatabodyPart usernamepart = form.getfield ("اسم المستخدم") ؛
// 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 ؛
ملف الملف = ملف جديد (FilePath) ؛
system.out.println ("file" + file.getabsolutepath ()) ؛
يحاول {
// حفظ الملف
fileUtils.copyInputStreamTofile (fileInputStream ، ملف) ؛
// saveFile (fileInputStream ، file) ؛
} catch (ioException ex) {
logger.getLogger (UploadImagerEsource.class.getName ()). log (level.severe ، null ، ex) ؛
}
System.out.println ("" " +" الصور/" + نتيجة) ؛
استجابة. setcharacterencoding ("UTF-8") ؛
إرجاع "الصور/" + نتيجة ؛
}
/**
*
* لا تقرأ الصور من خادم الويب. يمكن الحصول على الملفات الموجودة في دليل معين على القرص من خلال التدفقات وإعادة البيانات من خلال الاستجابة. getOutputStream ().
*
* Param ImageName-Name-Name-Name
* param نوع امتداد الصورة
* param استجابة {link httpservletresponse}
* throws ioException
*/
@يحصل
path ("/images/{name}. {type}")
public void showimg (pathparam ("name") سلسلة ImageName ،
@pathparam ("type") نوع السلسلة ،
استجابة httpservletsponse context)
يلقي ioexception {
System.out.println ("showimg") ؛
حاول (inputStream في = جديد fileInputStream (article_images_path
+ ImageName + "." + نوع)) {
fileUtils.copyFile (ملف جديد (article_images_path + imageName + ".
// fileCopyUtils.copy (in ، response.getOutputStream ()) ؛
}
}
// حفظ معلومات الملف إلى القرص
private void savefile (inputStream uploadIdInputStream ، ملف ملف) {
System.out.println ("------- SaveFile -----") ؛
يحاول {
OutputStream OutputPustream = fileOutputStream جديد (ملف) ؛
int read = 0 ؛
بايت [] بايت = بايت جديد [1024] ؛
// outputStream = fileOutputStream جديد (ملف جديد (ServerLocation)) ؛
بينما (((read = uploadedInputStream.read (bytes))! = -1) {
outpustream.write (بايت ، 0 ، اقرأ) ؛
}
outputStream.flush () ؛
outpustream.close () ؛
} catch (ioException e) {
E.PrintStackTrace () ؛
}
}
}
2 بالطبع ، للاختبار ، قد تحتاج أيضًا إلى إعداد ملف JSP بنموذج نموذج
<form action = "$ {pagecontext.request.contextpath}/upload/eploadimage2" method = "post" enctype = "multipart/form-data">
<p>
ملف: <إدخال type = "file" name = "file" /> <br />
اسم المستخدم: <input type = "text" name = "username" /> <br />
</p>
<type type = "إرسال" value = "تحميل" />
</form>
النتائج كما يلي
ما سبق هو كل شيء عن هذا المقال ، آمل أن يكون من المفيد للجميع تنفيذ تحميل ملفات Jersey.