RESTEasy使用httpclient上传文件


我们使用resteasy-multipart的MultipartFormDataInput类来操作数据。

1) 更新maven项目依赖

添加下面的maven依赖到你的项目:

<!-- core library -->
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
         <artifactId>resteasy-jaxrs</artifactId>
        <version>2.3.1.GA</version>
    </dependency>
    <dependency>
        <groupId>net.sf.scannotation</groupId>
        <artifactId>scannotation</artifactId>
        <version>1.0.2</version>
    </dependency>
    <!-- JAXB provider -->
   <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-jaxb-provider</artifactId>
        <version>2.3.1.GA</version>
    </dependency> 
    <!-- Multipart support -->
    <dependency>
        <groupId>org.jboss.resteasy</groupId>
        <artifactId>resteasy-multipart-provider</artifactId>
        <version>2.3.1.GA</version>
    </dependency>
    <!-- For better I/O control -->
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.0.1</version>
    </dependency>


同样也添加以下图片中的jar包,到你的项目依赖中:

HTTP client jar files

2) 准备http client,用于客户端上传文件:

package com.howtodoinjava.client.upload;
  
import java.io.File;
 
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
  
public class DemoFileUploader 
{
    public static void main(String args[]) throws Exception
    {
        DemoFileUploader fileUpload = new DemoFileUploader () ;
        File file = new File("C:/Lokesh/Setup/workspace/RESTfulDemoApplication/target/classes/Tulips.jpg") ;
        //Upload the file
        fileUpload.executeMultiPartRequest("http://localhost:8080/RESTfulDemoApplication/user-management/image-upload", 
                file, file.getName(), "File Uploaded :: Tulips.jpg") ;
    }  
     
    public void executeMultiPartRequest(String urlString, File file, String fileName, String fileDescription) throws Exception 
    {
        HttpClient client = new DefaultHttpClient() ;
        HttpPost postRequest = new HttpPost (urlString) ;
        try
        {
            //Set various attributes 
            MultipartEntity multiPartEntity = new MultipartEntity () ;
            multiPartEntity.addPart("fileDescription", new StringBody(fileDescription != null ? fileDescription : "")) ;
            multiPartEntity.addPart("fileName", new StringBody(fileName != null ? fileName : file.getName())) ;
  
            FileBody fileBody = new FileBody(file, "application/octect-stream") ;
            //Prepare payload
            multiPartEntity.addPart("attachment", fileBody) ;
  
            //Set to request body
            postRequest.setEntity(multiPartEntity) ;
             
            //Send request
            HttpResponse response = client.execute(postRequest) ;
             
            //Verify response if any
            if (response != null)
            {
                System.out.println(response.getStatusLine().getStatusCode());
            }
        }
        catch (Exception ex)
        {
            ex.printStackTrace() ;
        }
    }
}


3)编写RESTful API应用来处理文件请求:

package com.howtodoinjava.client.upload;
 
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
 
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
 
import org.apache.commons.io.IOUtils;
import org.jboss.resteasy.plugins.providers.multipart.InputPart;
import org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataInput;
 
@Path("/user-management")
public class DemoFileSaver_MultipartFormDataInput 
{
    private final String UPLOADED_FILE_PATH = "c:\temp\";
 
    @POST
    @Path("/image-upload")
    @Consumes("multipart/form-data")
    public Response uploadFile(MultipartFormDataInput input) throws IOException 
    {
        //Get API input data
        Map<String, List<InputPart>> uploadForm = input.getFormDataMap();
         
        //Get file name
        String fileName = uploadForm.get("fileName").get(0).getBodyAsString();
         
        //Get file data to save
        List<InputPart> inputParts = uploadForm.get("attachment");
 
        for (InputPart inputPart : inputParts)
        {
            try
            {
                //Use this header for extra processing if required
                @SuppressWarnings("unused")
                MultivaluedMap<String, String> header = inputPart.getHeaders();
                 
                // convert the uploaded file to inputstream
                InputStream inputStream = inputPart.getBody(InputStream.class, null);
                 
                byte[] bytes = IOUtils.toByteArray(inputStream);
                // constructs upload file path
                fileName = UPLOADED_FILE_PATH + fileName;
                writeFile(bytes, fileName);
                System.out.println("Success !!!!!");
            } 
            catch (Exception e) 
            {
                e.printStackTrace();
            }
        }
        return Response.status(200)
                .entity("Uploaded file name : "+ fileName).build();
    }
 
    //Utility method
    private void writeFile(byte[] content, String filename) throws IOException 
    {
        File file = new File(filename);
        if (!file.exists()) {
            file.createNewFile();
        }
        FileOutputStream fop = new FileOutputStream(file);
        fop.write(content);
        fop.flush();
        fop.close();
    }
}
Happy Learning !!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值