English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

مثال على تحميل ملف باستخدام Spring MVC

يقدم Spring MVC طريقة سهلة لرفع الملفات، يمكن أن تكون صورًا أو ملفات أخرى. دعنا نرى مثالًا بسيطًا لرفع ملف باستخدام Spring MVC.

ملفات jar الضرورية

لإجراء هذا المثال، تحتاج إلى تحميل:

ملفات jar لـ Spring Core ملفات jar لـ Spring Web ملفات commons-fileupload.jar وcommons-io.jar

1)استنزع جميع ملفات Spring، بما في ذلك core، web، aop، mvc، j2ee، معالجة مسافات، oxm، jdbc، orm، إلخ.

2)استنزع commons-io.jar

3)استنزع Commons -fileupload.jar

خطوات تحميل ملفات Spring MVC (باستثناء MVC)

1)أضف ملفات commons-io وfileupload.jar

2)أضف عنصر CommonsMultipartResolver في spring-servlet.xml

<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>

3)أنشئ نموذج لرفع الملف. يجب أن يكون الاسم النموذج "post"، وأدخل "multiple/form-data".

<form action="savefile" method="post" enctype="multipart/form-data">
اختر ملف: <input type="file" name="file"/>
<input type="submit" value="تحميل ملف"/>
</form>

4)في الكنترولر يستخدم كلاس CommonsMultipartFile.

@RequestMapping(value="/savefile",method=RequestMethod.POST)
public ModelAndView upload(@RequestParam CommonsMultipartFile file, HttpSession session){
        String path=session.getServletContext().getRealPath("/");
        String filename=file.getOriginalFilename();
        
        System.out.println(path+" "+filename);
        try{
        byte barr[]=file.getBytes();
        
        BufferedOutputStream bout=new BufferedOutputStream(
                 new FileOutputStream(path+"/"+filename));
        bout.write(barr);
        bout.flush();
        bout.close();
        
        catch(Exception e){System.out.println(e);}
        return new ModelAndView("upload-success","filename",path+"/"+filename);
    }

5) عرض الصورة في JSP.

<h1>نجاح التحميل</h1>
<img src="${filename}"/>

مثال على تحميل ملف باستخدام Spring MVC

إنشاء مجلد صور

أنشئ مجلد "صور" في مشروعك، لأننا سنكتب كودًا لتحديد جميع الملفات في مجلد "/صور".

index.jsp

<a href="uploadform">تحميل الصورة</a>

Emp.java

باقة com.w3codebox;
استيراد java.io.BufferedOutputStream;
استيراد java.io.File;
استيراد java.io.FileOutputStream;
استيراد javax.servlet.ServletContext;
استيراد javax.servlet.http.HttpServletRequest;
استيراد javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class HelloController {
    private static final String UPLOAD_DIRECTORY =
    
    @RequestMapping("uploadform")
    public ModelAndView uploadForm(){
        return new ModelAndView("uploadform"); 
    }
    
    @RequestMapping(value="savefile",method=RequestMethod.POST)
    public ModelAndView saveimage(@RequestParam CommonsMultipartFile file,
           HttpSession session) throws Exception{
    ServletContext context = session.getServletContext();
    String path = context.getRealPath(UPLOAD_DIRECTORY);
    String filename = file.getOriginalFilename();
    System.out.println(path+" "+filename);       
    byte[] bytes = file.getBytes();
    BufferedOutputStream stream =new BufferedOutputStream(new FileOutputStream(
         new File(path + File.separator + filename)));
    stream.write(bytes);
    stream.flush();
    stream.close();
         
    return new ModelAndView("uploadform","filesuccess","File successfully saved!");
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
 <servlet>
    <servlet-name>spring</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>spring</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>

spring-servlet.xml

في هذا المكان، تحتاج إلى إنشاء bean لـ CommonsMultipartResolver.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
http://www.springframework.org/schema/context  
http://www.springframework.org/schema/context/spring-context-3.0.xsd">  
<context:component-scan base-package="com.w3codebox"></context:component-scan>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<bean id="multipartResolver" 
class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>
</beans>

uploadform.jsp

يجب أن يكون النموذج هنا method = "post" و enctype = "multipart/form-data".

<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
 
<!DOCTYPE html>
<html>
 <head>
 <title>رفع ملف صورة</title>
 </head>
 <body>
<h1>مثال رفع ملف - w3codebox</h1>
<h3 style="color:red">${filesuccess}</h3>
<form:form method="post" action="savefile" enctype="multipart/form-data">
<p><label for="image">اختر صورة</label></p>
<p><input name="file" id="fileToUpload" type="file" /></p>
<p><input type="submit" value="رفع"></p>
</form:form>
</body>
</html>

الإخراج

انتقل إلى مسار الطباعة على الخادم لمعاينة ملفات الرفع.