Struts 2 এর File Upload এবং Download

স্ট্রাটস (Struts 2) - Java Technologies

328

Struts 2-এ File Upload এবং File Download অত্যন্ত সহজ এবং সরল। ফাইল আপলোড এবং ডাউনলোড করার জন্য Struts 2 এ অনেক সুবিধা রয়েছে, যেমন ফাইল কন্ট্রোলের জন্য একটি সহজ Action Class, FileUploadInterceptor এবং অন্যান্য ট্যাগ লাইব্রেরি, যা ফাইল ইনপুট এবং আউটপুট ব্যবস্থাপনাকে আরও কার্যকর করে।

এখানে আমরা Struts 2-এ File Upload এবং File Download এর উদাহরণ দেখব।


1. File Upload কী?

ফাইল আপলোড হল একটি প্রক্রিয়া যেখানে ব্যবহারকারী তার কম্পিউটার থেকে ফাইল সার্ভারে আপলোড করে। Struts 2 এ ফাইল আপলোড করতে FileUploadInterceptor ব্যবহার করা হয়, যা ফাইলের ইনপুট হ্যান্ডলিং এবং আপলোড প্রক্রিয়া সম্পাদন করে।


2. File Upload উদাহরণ

Step 1: Action Class for File Upload

FileUploadAction.java (Action Class)

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUploadAction extends ActionSupport {

    // File input field for uploading
    private File file;
    private String fileContentType;
    private String fileFileName;

    // Getter and Setter methods
    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    // Execute method to handle file upload logic
    @Override
    public String execute() {
        // Define the directory to save the uploaded file
        String destinationPath = "C:/uploadedFiles/" + fileFileName;
        File destinationFile = new File(destinationPath);

        // Copy the uploaded file to the destination directory
        try (FileInputStream fis = new FileInputStream(file);
             FileOutputStream fos = new FileOutputStream(destinationFile)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = fis.read(buffer)) != -1) {
                fos.write(buffer, 0, bytesRead);
            }
            return SUCCESS;
        } catch (IOException e) {
            e.printStackTrace();
            return ERROR;
        }
    }
}

এখানে:

  • File file: ফাইল ইনপুট হিসাবে স্টোর করা হচ্ছে।
  • fileContentType এবং fileFileName: ফাইলের কনটেন্ট টাইপ এবং ফাইল নাম অ্যাক্সেস করার জন্য ব্যবহার করা হচ্ছে।
  • execute() মেথডে ফাইলটি গন্তব্যে (destination directory) কপি করা হচ্ছে।

Step 2: struts.xml Configuration

struts.xml কনফিগারেশন

<struts>
    <package name="default" extends="struts-default">
        <action name="upload" class="com.example.action.FileUploadAction">
            <result name="success">/success.jsp</result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

এখানে:

  • action name="upload": FileUploadAction ক্লাসের upload অ্যাকশন মেপিং হচ্ছে।
  • result: ফাইল আপলোড সফল হলে success.jsp এবং ত্রুটি হলে error.jsp পৃষ্ঠায় রিডাইরেক্ট হবে।

Step 3: JSP Form for File Upload

upload.jsp (ফর্ম ইনপুট পেজ)

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head><title>File Upload</title></head>
<body>
    <h2>Upload File</h2>
    <s:form action="upload" method="post" enctype="multipart/form-data">
        <s:file name="file" label="Select File"/>
        <s:submit value="Upload"/>
    </s:form>
</body>
</html>

এখানে:

  • s:form: ফাইল আপলোড ফর্ম তৈরি করতে enctype="multipart/form-data" ব্যবহার করা হয়েছে।
  • s:file: ফাইল ইনপুট ফিল্ড তৈরি করা হয়েছে।

3. File Download কী?

ফাইল ডাউনলোড হল একটি প্রক্রিয়া যেখানে ব্যবহারকারী একটি ফাইল সার্ভার থেকে তার কম্পিউটারে ডাউনলোড করে। Struts 2-এ ফাইল ডাউনলোডের জন্য StreamResult ব্যবহার করা হয়, যা নির্দিষ্ট ফাইলকে ইউজারের ব্রাউজারে পাঠায়।


4. File Download উদাহরণ

Step 1: Action Class for File Download

FileDownloadAction.java (Action Class)

package com.example.action;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.Result;
import org.apache.struts2.dispatcher.multipart.FileUploadException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

public class FileDownloadAction extends ActionSupport {

    private String fileName;
    private File fileToDownload;

    // Getter and Setter for fileName
    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    // Method to handle file download
    @Override
    public String execute() {
        String filePath = "C:/uploadedFiles/" + fileName; // Path to the file
        fileToDownload = new File(filePath);

        if (fileToDownload.exists()) {
            return SUCCESS;
        } else {
            return ERROR;
        }
    }

    // Result to stream the file
    public Result getDownloadFile() {
        try {
            FileInputStream fis = new FileInputStream(fileToDownload);
            return new StreamResult(fis, fileName);
        } catch (IOException e) {
            e.printStackTrace();
            return ERROR;
        }
    }
}

এখানে:

  • fileToDownload: ফাইলটি ডাউনলোড করার জন্য একটি ফাইল অবজেক্ট তৈরি করা হয়েছে।
  • execute() মেথডে ফাইলটির উপস্থিতি যাচাই করা হচ্ছে এবং যদি ফাইলটি থাকে তবে SUCCESS রিটার্ন করবে।
  • getDownloadFile() মেথডে ফাইলের ডাউনলোড স্ট্রিম প্রস্তুত করা হচ্ছে।

Step 2: struts.xml Configuration for File Download

struts.xml কনফিগারেশন

<struts>
    <package name="default" extends="struts-default">
        <action name="download" class="com.example.action.FileDownloadAction">
            <result name="success" type="stream">
                <param name="inputName">downloadFile</param>
                <param name="contentDisposition">attachment</param>
                <param name="contentType">application/octet-stream</param>
            </result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

এখানে:

  • action name="download": FileDownloadAction ক্লাসের download অ্যাকশন মেপিং হচ্ছে।
  • stream result: ফাইলটি ইউজারের ব্রাউজারে স্ট্রিম করার জন্য StreamResult ব্যবহৃত হচ্ছে।

Step 3: JSP Form for File Download

download.jsp (ডাউনলোড লিঙ্ক)

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head><title>Download File</title></head>
<body>
    <h2>Download File</h2>
    <s:form action="download" method="post">
        <s:textfield name="fileName" label="Enter File Name"/>
        <s:submit value="Download"/>
    </s:form>
</body>
</html>

এখানে:

  • s:form: ফাইল নাম ইনপুট ফর্ম তৈরি করা হয়েছে।
  • s:textfield: ফাইলের নাম ইনপুটের জন্য একটি টেক্সটফিল্ড তৈরি করা হয়েছে।

সারাংশ

Struts 2-এ File Upload এবং File Download অত্যন্ত সহজ এবং কার্যকরী। FileUploadInterceptor ব্যবহার করে ফাইল আপলোড করা হয় এবং StreamResult ব্যবহার করে ফাইল ডাউনলোড করা হয়। Struts 2-এ ফাইল হ্যান্ডলিং, ভ্যালিডেশন, এবং কনফিগারেশন খুবই সহজ এবং পরিষ্কারভাবে সম্পন্ন করা যায়।

Content added By

Struts 2 ফ্রেমওয়ার্কে ফাইল আপলোড করার জন্য একটি শক্তিশালী পদ্ধতি রয়েছে। Struts 2 ফাইল আপলোড করার জন্য File প্রপার্টি এবং FileUploadInterceptor ইন্টারসেপ্টর ব্যবহার করে, যা ক্লায়েন্ট থেকে সার্ভারে ফাইল পাঠানোর প্রক্রিয়া সরল করে।

ফাইল আপলোডের জন্য Struts 2 তে আপনাকে দুটি প্রধান অংশে মনোযোগ দিতে হবে:

  1. Action ক্লাস: যেখানে ফাইলটি গ্রহণ করা হয়।
  2. Interceptors: ফাইলের সাইজ, টাইপ চেক করা এবং আপলোডের প্রক্রিয়া ব্যবস্থাপনা করা হয়।

Struts 2 তে File Upload এর জন্য প্রয়োজনীয় পদক্ষেপ

১. Maven Dependencies

ফাইল আপলোডের জন্য আপনার pom.xml ফাইলে struts2-core এবং struts2-convention-plugin ডিপেনডেন্সি যোগ করতে হবে। যদিও, struts2-core সাধারণত Struts 2 প্রোজেক্টে ইতিমধ্যেই থাকে।

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.20</version>
</dependency>

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-convention-plugin</artifactId>
    <version>2.5.20</version>
</dependency>

২. struts.xml কনফিগারেশন

Struts 2 ফ্রেমওয়ার্কে ফাইল আপলোডের জন্য FileUploadInterceptor ব্যবহার করতে হবে যা ফাইলের সাইজ এবং অন্যান্য বৈশিষ্ট্য চেক করতে সহায়ক।

struts.xml:

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="uploadFile" class="com.example.FileUploadAction">
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">1048576</param> <!-- 1MB -->
            </interceptor-ref>
            <result name="success">/uploadSuccess.jsp</result>
            <result name="input">/uploadForm.jsp</result>
        </action>
    </package>
</struts>
</struts>

ব্যাখ্যা:

  • <interceptor-ref name="fileUpload">: ফাইল আপলোডের জন্য FileUploadInterceptor ইন্টারসেপ্টর কনফিগার করা হয়েছে।
  • maximumSize: এই প্যারামিটারটি ফাইল আপলোডের সর্বোচ্চ সাইজ নির্ধারণ করে (এখানে 1MB)।

৩. Action ক্লাস তৈরি করা

FileUploadAction.java:

package com.example;

import com.opensymphony.xwork2.ActionSupport;
import java.io.File;

public class FileUploadAction extends ActionSupport {
    private File file;
    private String fileContentType;
    private String fileFileName;

    // Getter and Setter methods
    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    public String execute() {
        if (file != null) {
            System.out.println("File Name: " + fileFileName);
            System.out.println("File Content Type: " + fileContentType);
            // Add logic to save the file to server
            return SUCCESS;
        }
        return INPUT;
    }
}

ব্যাখ্যা:

  • File file: এখানে File ক্লাসের একটি ইনস্ট্যান্স তৈরি করা হয়েছে, যা আপলোড করা ফাইলের জন্য।
  • fileContentType: ফাইলের কনটেন্ট টাইপ ধারণ করে (যেমন image/jpeg, application/pdf ইত্যাদি)।
  • fileFileName: ফাইলের নাম ধারণ করে।

ফাইল আপলোডের পর, আপনি সাধারণত ফাইলটি সার্ভারে সংরক্ষণ করেন বা কোনো ডাটাবেসে রেফারেন্স জমা করেন।

৪. JSP ফর্ম তৈরি করা

uploadForm.jsp (ফাইল আপলোড ফর্ম):

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
    <body>
        <h2>Upload File</h2>
        <s:form action="uploadFile" method="post" enctype="multipart/form-data">
            <s:file name="file" label="Select a file" />
            <s:submit value="Upload" />
        </s:form>
    </body>
</html>

ব্যাখ্যা:

  • <s:file>: Struts 2 এর file tag ব্যবহার করে ফাইল আপলোড ফিল্ড তৈরি করা হয়েছে। এটি ব্যবহারকারীর কাছ থেকে ফাইল গ্রহণ করবে।
  • enctype="multipart/form-data": ফাইল আপলোড করতে এই enctype প্রয়োজন।

৫. ফাইল আপলোড সফল হলে Success Page তৈরি করা

uploadSuccess.jsp:

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
    <body>
        <h2>File uploaded successfully!</h2>
        <p>File name: <s:property value="fileFileName" /></p>
        <p>File type: <s:property value="fileContentType" /></p>
    </body>
</html>

ব্যাখ্যা:

  • <s:property>: অ্যাকশন ক্লাস থেকে প্রাপ্ত ডেটা (ফাইল নাম এবং কনটেন্ট টাইপ) JSP পৃষ্ঠায় প্রদর্শন করে।

ফাইল আপলোডের জন্য Struts 2-এ কাস্টম ইন্টারসেপ্টর

Struts 2 এ FileUploadInterceptor ব্যবহার করা হয়। এটি ফাইল আপলোড প্রক্রিয়াটি সঠিকভাবে হ্যান্ডল করে এবং ফাইলের সাইজ, টাইপ চেক করে।

<interceptor-ref name="fileUpload">
    <param name="maximumSize">1048576</param> <!-- 1MB -->
    <param name="allowedTypes">image/jpeg, image/png</param> <!-- allowed file types -->
</interceptor-ref>
  • maximumSize: ফাইলের সর্বোচ্চ সাইজ নির্ধারণ করে।
  • allowedTypes: কোন ধরনের ফাইল অনুমোদিত তা নির্ধারণ করে (যেমন, image/jpeg, image/png ইত্যাদি)।

সারাংশ

Struts 2 এ ফাইল আপলোড করার জন্য আপনি FileUploadInterceptor এবং File প্রপার্টি ব্যবহার করতে পারেন। আপনাকে struts.xml কনফিগারেশন ফাইলে ফাইল আপলোড ইন্টারসেপ্টর যোগ করতে হবে, এবং Action ক্লাসে ফাইল প্রপার্টি (যেমন, File file, String fileFileName, String fileContentType) তৈরি করতে হবে। আপনি ফাইলটি JSP ফর্মের মাধ্যমে ক্লায়েন্ট থেকে গ্রহণ করতে পারবেন এবং তারপর Action ক্লাসে এটি প্রক্রিয়া করতে পারবেন।

Content added By

Struts 2FileUploadInterceptor একটি বিশেষ ধরনের ইন্টারসেপ্টর যা ফাইল আপলোড করার কাজ সহজ করে। এটি HTTP রিকোয়েস্টে প্রাপ্ত ফাইলগুলো প্রসেস করার জন্য ব্যবহৃত হয় এবং সাধারণত ফর্মে ফাইল আপলোড করতে ব্যবহৃত হয়, যেমন প্রোফাইল ছবি আপলোড, ডকুমেন্ট আপলোড ইত্যাদি। Struts 2 তে FileUploadInterceptor ব্যবহার করে আপনি ফাইল আপলোড করার প্রক্রিয়াটি খুব সহজভাবে কনফিগার করতে পারেন।


FileUploadInterceptor কী?

FileUploadInterceptor Struts 2 এর একটি বিল্ট-ইন ইন্টারসেপ্টর যা ফাইল আপলোড প্রসেসিং পরিচালনা করে। এটি HTTP রিকোয়েস্টে ফাইল ইনপুট স্ট্রিম সংগ্রহ করে এবং ফাইলটিকে একটি নির্দিষ্ট জায়গায় সেভ করে দেয়। Struts 2 এ ফাইল আপলোড করতে কিছু প্রয়োজনীয় কনফিগারেশন এবং ক্লাস ব্যবহার করা হয়, যার মাধ্যমে আপনি ফাইলটি অ্যাকশন ক্লাসে অ্যাক্সেস করতে পারেন এবং সেই ফাইলটি প্রক্রিয়া করতে পারেন।


FileUploadInterceptor কনফিগারেশন

1. struts.xml ফাইলে FileUploadInterceptor কনফিগার করা

প্রথমে আপনাকে struts.xml ফাইলে FileUploadInterceptor কনফিগার করতে হবে। এটি মূলত ফাইল আপলোডের জন্য HTTP রিকোয়েস্টের মধ্যে file প্যারামিটার শনাক্ত করে।

<struts>
    <package name="default" namespace="/" extends="struts-default">
        <action name="uploadFile" class="com.example.FileUploadAction">
            <interceptor-ref name="fileUpload"/>
            <result name="success">/WEB-INF/content/uploadSuccess.jsp</result>
            <result name="input">/WEB-INF/content/uploadForm.jsp</result>
        </action>
    </package>

    <interceptors>
        <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>
    </interceptors>
</struts>

এখানে, uploadFile অ্যাকশনের জন্য FileUploadInterceptor ব্যবহার করা হয়েছে এবং ফাইল আপলোডের পরে uploadSuccess.jsp পেজে রিডিরেক্ট করা হবে।

2. Action Class তৈরি করা

আপনার অ্যাকশন ক্লাসে ফাইল আপলোডের জন্য কিছু ফিল্ড এবং মেথড তৈরি করতে হবে। ফাইলের নাম, টাইপ, সাইজ ইত্যাদি গ্রহণ করার জন্য Struts 2 এ File টাইপ ব্যবহার করা হয়।

import com.opensymphony.xwork2.ActionSupport;
import java.io.File;

public class FileUploadAction extends ActionSupport {
    private File file;
    private String fileContentType;
    private String fileFileName;

    // Getter and Setter for file, fileContentType, and fileFileName
    public File getFile() {
        return file;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public String getFileContentType() {
        return fileContentType;
    }

    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }

    // Execute method to handle file upload
    public String execute() {
        if (file != null) {
            // ফাইল প্রসেসিং: ফাইলটিকে একটি নির্দিষ্ট ফোল্ডারে সেভ করা
            System.out.println("File Name: " + fileFileName);
            System.out.println("Content Type: " + fileContentType);

            // এখানে ফাইল সেভ করার কোড লিখবেন
            // উদাহরণস্বরূপ: FileUtils.copyFile(file, new File("/path/to/save/" + fileFileName));
            
            return SUCCESS;
        }
        return INPUT;
    }
}

এখানে, File file, String fileContentType, এবং String fileFileName ফিল্ডগুলি ব্যবহারকারী দ্বারা আপলোড করা ফাইলের ইনফরমেশন সংরক্ষণ করে। execute() মেথডে ফাইল প্রসেস করা হয় এবং সফলভাবে আপলোড হলে SUCCESS রিটার্ন করা হয়।

3. JSP ফর্ম তৈরি করা

ফাইল আপলোডের জন্য আপনাকে একটি ফর্ম তৈরি করতে হবে যেখানে ব্যবহারকারী ফাইল সিলেক্ট করে সাবমিট করতে পারবে। এটি Struts 2 ট্যাগ ব্যবহার করে করা হয়।

uploadForm.jsp

<html>
<body>
    <h1>Upload File</h1>
    <s:form action="uploadFile" enctype="multipart/form-data">
        <s:file name="file" label="Choose a file" />
        <s:submit value="Upload" />
    </s:form>
</body>
</html>

এখানে, <s:file> ট্যাগ ব্যবহার করে ফাইল সিলেক্ট করার ফিচার প্রদান করা হয়েছে এবং enctype="multipart/form-data" অ্যাট্রিবিউটটি ফর্মের জন্য যুক্ত করা হয়েছে, যা ফাইল আপলোডের জন্য প্রয়োজন।

uploadSuccess.jsp

<html>
<body>
    <h1>File uploaded successfully!</h1>
</body>
</html>

এটি একটি সিম্পল সাকসেস পেজ যেখানে ফাইল আপলোড সফল হলে বার্তা প্রদর্শিত হবে।


FileUploadInterceptor এর সুবিধা

  1. সহজ কনফিগারেশন: Struts 2 এর FileUploadInterceptor ফাইল আপলোডের জন্য অত্যন্ত সহজ কনফিগারেশন প্রদান করে।
  2. ফাইল তথ্য অ্যাক্সেস: আপনি সহজেই ফাইলের নাম, সাইজ, কন্টেন্ট টাইপ ইত্যাদি অ্যাক্সেস করতে পারবেন।
  3. মাল্টিপার্ট ফর্ম সাপোর্ট: Struts 2 ফাইল আপলোডের জন্য মাল্টিপার্ট ফর্ম ডেটা সাপোর্ট করে।
  4. ফাইল সেভিং: ফাইলটি সেভ করার জন্য সহজেই ফাইল সিস্টেমে একটি নির্দিষ্ট অবস্থান নির্ধারণ করা যায়।

উপসংহার

FileUploadInterceptor Struts 2 এর একটি অত্যন্ত শক্তিশালী এবং সহজ ব্যবহারযোগ্য ইন্টারসেপ্টর, যা ফাইল আপলোড করার কাজ সহজ করে তোলে। আপনি এই ইন্টারসেপ্টরটি ব্যবহার করে সহজে ব্যবহারকারী থেকে ফাইল গ্রহণ করতে পারবেন, এবং সেই ফাইলটি অ্যাকশন ক্লাসে প্রসেস বা সেভ করতে পারবেন। এটি একটি সিম্পল এবং কাস্টমাইজেবল উপায় ফাইল আপলোড ব্যবস্থাপনা করার জন্য।

Content added By

Struts 2 হল একটি শক্তিশালী Java ফ্রেমওয়ার্ক যা ওয়েব অ্যাপ্লিকেশন ডেভেলপমেন্টের জন্য ব্যবহৃত হয় এবং এতে বিভিন্ন ধরনের ফিচার অন্তর্ভুক্ত থাকে। এক্সটার্নাল ফাইলের সাথে ইন্টারঅ্যাকশন বা file download ফিচার অ্যাপ্লিকেশনে যোগ করা অনেকসময় প্রয়োজনীয় হয়ে ওঠে। Struts 2 এ file download করার জন্য নির্দিষ্ট কনফিগারেশন এবং কিছু কোড সংযোজন করতে হয়।

Struts 2 এ File Download এর প্রয়োজনীয়তা

একটি ওয়েব অ্যাপ্লিকেশনে file download সাপোর্ট করার জন্য সাধারণত কিছু নির্দিষ্ট প্রক্রিয়া অনুসরণ করতে হয়। এই প্রক্রিয়াতে মূলত:

  • Action Class: যেখানে ফাইলের পথ (path) নির্ধারণ এবং ডাউনলোডের জন্য রেসপন্স প্রস্তুত করা হয়।
  • struts.xml: যেখানে অ্যাকশন এবং রেজাল্ট কনফিগার করা হয়।
  • JSP: ইউজারকে ফাইল ডাউনলোড করার জন্য একটি লিঙ্ক দেওয়া হয়।

File Download করার জন্য Steps

  1. Action Class তৈরি করা: যেখানে ফাইলের লজিক হ্যান্ডলিং করা হবে।
  2. struts.xml কনফিগারেশন করা: Action ক্লাস এবং তার রেজাল্ট ফাইল নির্ধারণ করা।
  3. JSP বা HTML পৃষ্ঠায় ডাউনলোড লিঙ্ক তৈরি করা: ইউজারকে ফাইল ডাউনলোড করার জন্য লিঙ্ক বা বাটন সরবরাহ করা।

উদাহরণ: Struts 2 তে File Download

এখানে একটি সিম্পল উদাহরণ দেয়া হচ্ছে যেখানে একটি ফাইল ডাউনলোডের জন্য কনফিগারেশন করা হয়েছে।

1. Action Class (FileDownloadAction.java)

package com.example;

import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.IOException;

public class FileDownloadAction extends ActionSupport {
    private String fileName;
    private InputStream inputStream;

    // Getter and Setter for fileName and inputStream
    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    // Method to handle file download logic
    public String execute() throws IOException {
        // File path where the file is stored
        String filePath = "path/to/your/file/directory/" + fileName;

        // Creating an InputStream for the file
        File file = new File(filePath);
        if (file.exists()) {
            inputStream = new FileInputStream(file);
            return SUCCESS;
        } else {
            return ERROR;
        }
    }
}

এখানে FileDownloadAction ক্লাসে:

  • fileName: ফাইলের নাম যা ইউজার ডাউনলোড করতে চায়।
  • inputStream: ফাইলের ইনপুট স্ট্রিম যা ফাইলটি পাঠানোর জন্য ব্যবহৃত হবে।
  • execute(): এই মেথডে ফাইলটি খোলা হয় এবং ইনপুট স্ট্রিমের মাধ্যমে পাঠানো হয়।

2. struts.xml (Action Mapping)

<struts>
    <package name="default" extends="struts-default">
        <action name="downloadFile" class="com.example.FileDownloadAction">
            <result name="success" type="stream">
                <param name="contentType">application/octet-stream</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">attachment;filename=${fileName}</param>
                <param name="bufferSize">1024</param>
            </result>
            <result name="error">/error.jsp</result>
        </action>
    </package>
</struts>

এখানে:

  • result type="stream": এটা বলে দেয় যে অ্যাকশন রেসপন্সটি ফাইল ডাউনলোডের জন্য স্ট্রিম হিসেবে পাঠানো হবে।
  • contentType: এটি ফাইলের MIME টাইপ নির্দেশ করে। সাধারণত application/octet-stream ব্যবহার করা হয়, যা সাধারণ বাইনারি ফাইলের জন্য।
  • inputName: ফাইলের ইনপুট স্ট্রিমের জন্য ব্যবহার করা হবে, যা Action ক্লাসে সেট করা হয়েছে।
  • contentDisposition: এটিতে attachment বলা হয়েছে, যা ফাইলটি ডাউনলোড হিসেবে দেখাবে এবং ইউজারকে সরাসরি ওপেন না করে সেভ করার অপশন দেবে।

3. JSP ফাইল (download.jsp)

<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<head>
    <title>File Download</title>
</head>
<body>
    <h2>Click below to download the file:</h2>
    <s:a href="downloadFile?fileName=example.txt">Download Example File</s:a>
</body>
</html>

এখানে একটি লিঙ্ক তৈরি করা হয়েছে, যা ইউজারকে ফাইল ডাউনলোড করার জন্য পরিচালিত করবে। এখানে fileName=example.txt ফাইলের নাম হিসেবে দেয়া হয়েছে, যা অ্যাকশন ক্লাসে পাঠানো হবে।

4. Error Page (error.jsp)

<html>
<head>
    <title>Error</title>
</head>
<body>
    <h2>Error: The file you requested does not exist!</h2>
</body>
</html>

এটি error.jsp ফাইল যা তখন দেখানো হবে যদি ফাইলটি পাওয়া না যায়।


File Download করার ক্ষেত্রে কিছু গুরুত্বপূর্ণ বিষয়:

  1. File Path: ফাইলের সঠিক পাথ নিশ্চিত করুন। এটি হতে পারে আপনার সার্ভারের লোকাল ডিরেক্টরি অথবা ক্লাউড স্টোরেজের পাথ।
  2. Content-Type: ফাইলের সঠিক MIME টাইপ নির্ধারণ করুন, বিশেষত যখন আপনি একাধিক ফাইল টাইপ (যেমন PDF, DOC, Image) ডাউনলোড করতে চান।
  3. Security: ফাইল ডাউনলোডের সময়, এক্সটেনশন বা ফাইল কনটেন্ট চেক করা গুরুত্বপূর্ণ, যাতে শুধুমাত্র নিরাপদ ফাইলগুলো ডাউনলোড করা যায়। যেমন, আপনি কোনো ডিরেক্টরি থেকে ডাইনামিক ফাইল নেবেন না যেটি ইউজার কন্ট্রোল করতে পারে (অথবা ফাইলের অ্যাক্সেস কন্ট্রোল করতে পারেন)।
  4. Download Size: ফাইলের সাইজ খুব বড় হলে, তখন bufferSize প্যারামিটারটি ব্যবহার করে ডাউনলোড প্রক্রিয়া টিউন করতে পারেন যাতে অ্যাপ্লিকেশন স্লো না হয়।

সারাংশ

Struts 2 তে ফাইল ডাউনলোডের জন্য, একটি Action ক্লাস তৈরি করতে হয় যা ফাইলের ইনপুট স্ট্রিম প্রস্তুত করে। এরপর, struts.xml কনফিগারেশনে সঠিক রেজাল্ট টাইপ (stream) ব্যবহার করতে হয় এবং ফাইলের কন্টেন্ট টাইপ এবং ডাউনলোডের অন্যান্য প্যারামিটার নির্ধারণ করতে হয়। JSP পৃষ্ঠায় একটি ডাউনলোড লিঙ্ক প্রদান করা হয় যা অ্যাকশন ক্লাসকে ফাইল ডাউনলোড করতে নির্দেশ দেয়। Struts 2 এর মাধ্যমে সহজেই ফাইল ডাউনলোড করা সম্ভব, এবং এটি যথাযথ নিরাপত্তা ব্যবস্থা নিয়েও করা যেতে পারে।

Content added By

Struts 2 এ File Upload এবং Download

Struts 2 ফ্রেমওয়ার্কে file upload এবং file download করতে ব্যবহৃত হয় Struts 2 File Upload প্লাগইন এবং Java IO লাইব্রেরি। ফাইল আপলোড এবং ডাউনলোডের জন্য Struts 2 এর মাধ্যমে সহজেই ফর্ম এবং অ্যাকশন কনফিগার করা যেতে পারে।


File Upload in Struts 2

Struts 2 ফ্রেমওয়ার্কে ফাইল আপলোড করার জন্য struts2-core-XX.jar এবং commons-fileupload-XX.jar ফাইলগুলি আপনার প্রকল্পে অন্তর্ভুক্ত থাকতে হবে। ফাইল আপলোড করার জন্য আমরা s:file ট্যাগ ব্যবহার করি, যা ফাইল ইনপুট ফিল্ড তৈরি করতে ব্যবহৃত হয়।

1. struts.xml কনফিগারেশন

প্রথমে struts.xml ফাইলে অ্যাকশন কনফিগার করুন যা ফাইল আপলোড প্রক্রিয়াটি পরিচালনা করবে।

<struts>
    <package name="default" extends="struts-default">
        <action name="upload" class="com.example.UploadAction" method="execute">
            <result name="success">/uploadSuccess.jsp</result>
        </action>
    </package>
</struts>

2. UploadAction ক্লাস

এখন UploadAction ক্লাস তৈরি করুন যেখানে ফাইল আপলোড প্রক্রিয়াটি সম্পন্ন হবে। এখানে, আপনি File টাইপের প্রপার্টি তৈরি করবেন, যা ফাইলটি পেতে সাহায্য করবে।

package com.example;

import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class UploadAction extends ActionSupport {
    private File upload;  // ফাইল আপলোড করা হবে
    private String uploadContentType;  // ফাইলের কনটেন্ট টাইপ
    private String uploadFileName;    // ফাইলের নাম

    public String execute() {
        // ফাইল প্রসেসিং
        if (upload != null) {
            String destinationPath = "/path/to/upload/directory/" + uploadFileName;
            File destFile = new File(destinationPath);
            upload.renameTo(destFile); // ফাইল রেনেম এবং ডিরেক্টরিতে স্থানান্তর
            return SUCCESS;
        }
        return ERROR;
    }

    // Getter and Setter methods
    public File getUpload() {
        return upload;
    }

    public void setUpload(File upload) {
        this.upload = upload;
    }

    public String getUploadContentType() {
        return uploadContentType;
    }

    public void setUploadContentType(String uploadContentType) {
        this.uploadContentType = uploadContentType;
    }

    public String getUploadFileName() {
        return uploadFileName;
    }

    public void setUploadFileName(String uploadFileName) {
        this.uploadFileName = uploadFileName;
    }
}

এখানে, UploadAction ক্লাসটি ফাইলটি গ্রহণ করবে, এবং তারপর নির্দিষ্ট ডিরেক্টরিতে সেটি সংরক্ষণ করবে।

3. JSP ফর্ম (File Upload Form)

এখন আপনাকে JSP পেজে ফাইল আপলোডের জন্য একটি ফর্ম তৈরি করতে হবে।

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>File Upload Example</title>
</head>
<body>
    <h2>Upload File</h2>
    <s:form action="upload" method="post" enctype="multipart/form-data">
        <s:file name="upload" label="Upload File" />
        <s:submit value="Upload" />
    </s:form>
</body>
</html>

এখানে, s:file ট্যাগ ফাইল ইনপুট ফিল্ড তৈরি করবে। enctype="multipart/form-data" এই ফর্মের মাধ্যমে ফাইল আপলোড করার জন্য ব্যবহৃত হয়।


File Download in Struts 2

Struts 2-এ ফাইল ডাউনলোডের জন্য সাধারণত InputStream ব্যবহার করা হয়, যা Action ক্লাসে ফাইল ডাউনলোড প্রক্রিয়া পরিচালনা করতে সাহায্য করে।

1. struts.xml কনফিগারেশন

struts.xml ফাইলে ডাউনলোড অ্যাকশনের কনফিগারেশন করতে হবে।

<struts>
    <package name="default" extends="struts-default">
        <action name="download" class="com.example.DownloadAction" method="execute">
            <result name="success" type="stream">
                <param name="contentType">application/octet-stream</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">attachment; filename="example.txt"</param>
            </result>
        </action>
    </package>
</struts>

এখানে, stream টাইপ রেজাল্ট ব্যবহার করা হয়েছে যাতে ফাইলটি সঠিকভাবে ডাউনলোড হতে পারে।

2. DownloadAction ক্লাস

এখন DownloadAction ক্লাস তৈরি করা হবে, যা ফাইল ডাউনলোডের জন্য InputStream প্রদান করবে।

package com.example;

import com.opensymphony.xwork2.ActionSupport;
import java.io.FileInputStream;
import java.io.InputStream;

public class DownloadAction extends ActionSupport {
    private InputStream inputStream;

    public String execute() {
        try {
            String filePath = "/path/to/file/example.txt";
            inputStream = new FileInputStream(filePath);  // ফাইল থেকে ইনপুট স্ট্রিম তৈরি
            return SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return ERROR;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }
}

এখানে, DownloadAction ক্লাসটি example.txt ফাইলের ইনপুট স্ট্রিম প্রস্তুত করবে, এবং Struts 2 রেসপন্স হিসেবে সেই ফাইলটি ডাউনলোড করবে।

3. JSP ফাইল ডাউনলোডের জন্য

এখন JSP ফাইল থেকে ডাউনলোড করার জন্য একটি লিঙ্ক তৈরি করতে হবে।

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>File Download Example</title>
</head>
<body>
    <h2>Download File</h2>
    <s:url action="download" var="downloadUrl"/>
    <a href="<s:property value='%{#downloadUrl}'/>">Click here to download the file</a>
</body>
</html>

এখানে, s:url ট্যাগের মাধ্যমে download অ্যাকশনের জন্য URL তৈরি করা হয়েছে, এবং লিঙ্কের মাধ্যমে ফাইল ডাউনলোড করা যাবে।


সারাংশ

Struts 2 ফ্রেমওয়ার্কে ফাইল আপলোড এবং ডাউনলোড খুবই সহজভাবে সম্পাদন করা যায়। ফাইল আপলোডের জন্য s:file ট্যাগ ব্যবহার করা হয় এবং File প্রপার্টি ব্যবহার করে Action ক্লাসে ফাইলটি গ্রহণ এবং ডিরেক্টরিতে সংরক্ষণ করা হয়। অন্যদিকে, ফাইল ডাউনলোডের জন্য InputStream ব্যবহার করে Action ক্লাসে ফাইলের ইনপুট স্ট্রিম তৈরি করা হয়, যা সঠিকভাবে ডাউনলোড করতে সহায়তা করে। Struts 2 ফ্রেমওয়ার্কে এই কার্যক্রমগুলো খুবই সহজ এবং কার্যকরীভাবে সম্পন্ন করা যায়।

Content added By
Promotion

Are you sure to start over?

Loading...