Multi-part Request একটি HTTP অনুরোধের ধরন, যা বিশেষ করে ফাইল আপলোড বা বিভিন্ন ধরনের ডেটা একসঙ্গে সার্ভারে পাঠানোর জন্য ব্যবহৃত হয়। সাধারণত, এই ধরনের অনুরোধে Content-Type: multipart/form-data হেডার থাকে, যা সার্ভারকে জানায় যে অনুরোধের মধ্যে একাধিক অংশ রয়েছে, যেমন ফাইল, টেক্সট ডেটা বা অন্যান্য ফর্ম ফিল্ড।
Apache HTTP Client-এ Multi-part Request পাঠানোর জন্য আমরা HttpPost এবং MultipartEntityBuilder ব্যবহার করে একটি অনুরোধ তৈরি করতে পারি। এই অনুরোধের মধ্যে আমরা একাধিক ফর্ম ডেটা বা ফাইল পাঠাতে পারি।
Multi-part Request এর কাজের ধরন
Multi-part request সাধারণত ফর্ম ডেটা বা ফাইল আপলোড করার জন্য ব্যবহৃত হয়। প্রতিটি অংশের মধ্যে আলাদা আলাদা Content-Disposition থাকে, যা পরিষ্কার করে যে কোন অংশটি ফাইল, কোন অংশটি টেক্সট ফিল্ড বা অন্য কিছু।
কোড উদাহরণ: Apache HTTP Client-এ Multi-part Request পাঠানো
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.util.EntityUtils;
import java.io.File;
public class ApacheHttpClientMultiPartRequest {
public static void main(String[] args) {
// HttpClient তৈরি করুন
CloseableHttpClient httpClient = HttpClients.createDefault();
try {
// HttpPost তৈরি করুন
HttpPost httpPost = new HttpPost("https://example.com/upload");
// MultipartEntityBuilder ব্যবহার করে multipart request তৈরি করুন
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
// ফর্ম ডেটা যোগ করুন (String Data)
builder.addPart("username", new StringBody("testuser"));
// ফাইল যোগ করুন (File Upload)
File file = new File("path/to/your/file.jpg");
builder.addPart("file", new FileBody(file));
// তৈরি করা MultipartEntity কে HttpPost এর মধ্যে সেট করুন
HttpEntity multipart = builder.build();
httpPost.setEntity(multipart);
// POST অনুরোধ পাঠান এবং প্রতিক্রিয়া সংগ্রহ করুন
CloseableHttpResponse response = httpClient.execute(httpPost);
try {
// প্রতিক্রিয়া স্ট্যাটাস কোড পড়ুন
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
// HttpEntity থেকে ডেটা পড়ুন
HttpEntity entity = response.getEntity();
if (entity != null) {
String responseBody = EntityUtils.toString(entity);
System.out.println("Response Content: " + responseBody);
}
} finally {
response.close();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// HttpClient বন্ধ করুন
httpClient.close();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
}
কোড ব্যাখ্যা
HttpClient তৈরি করা
CloseableHttpClient httpClient = HttpClients.createDefault();HttpClients.createDefault()ব্যবহার করে একটিHttpClientঅবজেক্ট তৈরি করা হয়েছে।
HttpPost তৈরি করা
HttpPost httpPost = new HttpPost("https://example.com/upload");HttpPostঅবজেক্ট তৈরি করা হয়েছে এবং এতে URL সেট করা হয়েছে যেখানে আমরা ফাইল এবং ফর্ম ডেটা পাঠাব।
MultipartEntityBuilder ব্যবহার করা
MultipartEntityBuilder builder = MultipartEntityBuilder.create();MultipartEntityBuilderব্যবহার করা হয়েছে, যা বিভিন্ন ধরনের ফর্ম ডেটা এবং ফাইল একসাথে তৈরি করতে সাহায্য করে।
ফর্ম ডেটা এবং ফাইল যোগ করা
builder.addPart("username", new StringBody("testuser")); File file = new File("path/to/your/file.jpg"); builder.addPart("file", new FileBody(file));- প্রথমে একটি টেক্সট ফর্ম ডেটা (
username) যোগ করা হয়েছে। - তারপর একটি ফাইল (
file.jpg) যোগ করা হয়েছে।
- প্রথমে একটি টেক্সট ফর্ম ডেটা (
MultipartEntity তৈরি করা
HttpEntity multipart = builder.build(); httpPost.setEntity(multipart);MultipartEntityBuilderথেকেHttpEntityতৈরি করা হয়েছে, যাHttpPostঅনুরোধে সেট করা হয়েছে।
- POST অনুরোধ পাঠানো এবং প্রতিক্রিয়া গ্রহণ করা
httpClient.execute(httpPost)ব্যবহার করে GET অনুরোধ পাঠানো হয়েছে এবং প্রতিক্রিয়া (HttpResponse) প্রাপ্ত হয়েছে।- তারপর
EntityUtils.toString()ব্যবহার করে প্রতিক্রিয়া বডি পড়া হয়েছে।
Multi-part Request এর সুবিধা
- ফাইল আপলোড: এটি বড় ফাইল এবং একাধিক ফাইল একই সাথে সার্ভারে আপলোড করার জন্য আদর্শ।
- ফর্ম ডেটা: ফর্ম ফিল্ড এবং অন্যান্য ডেটা একসাথে সার্ভারে পাঠানো যেতে পারে।
- বিভিন্ন ডেটা টাইপ: একটি অনুরোধে একাধিক ডেটা টাইপ (যেমন, টেক্সট, ফাইল, ইমেজ) পাঠানো সম্ভব।
সারাংশ
Apache HTTP Client-এ Multi-part Request ব্যবহারের মাধ্যমে ফাইল এবং টেক্সট ডেটা একসাথে সার্ভারে পাঠানো সম্ভব। MultipartEntityBuilder ব্যবহার করে, একাধিক ফর্ম ফিল্ড এবং ফাইল পাঠানোর জন্য সহজেই HttpPost অনুরোধ তৈরি করা যায়। এটি সাধারণত ফাইল আপলোড এবং ফর্ম ডেটা পাঠানোর ক্ষেত্রে ব্যবহৃত হয়।