加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Spring:文件上传RESTFUL Web Service

发布时间:2020-12-14 16:28:17 所属栏目:Java 来源:网络整理
导读:我正在使用 Spring 4.0为RESTFUL Web服务创建POC. 如果我们只传递String或任何其他基本数据,它可以正常工作. @RequestMapping(value="/getcontent/file",method=RequestMapping.post)public String getFileContents(@RequestParam("fileName",required=false
我正在使用 Spring 4.0为RESTFUL Web服务创建POC.
如果我们只传递String或任何其他基本数据,它可以正常工作.
@RequestMapping(value="/getcontent/file",method=RequestMapping.post)
public String getFileContents(@RequestParam("fileName",required=false) String fileName){
    logger.info("initialization of object");
    //----------------------------------------

     System.out.Println("name of File : " + fileName);  

    //----------------------------------------
}

这工作正常
但是如果我要传递字节流或文件对象功能,那么我可以用这些参数来写这个函数吗?并且我如何写客户端提供传递字节流?

@RequestMapping(value="/getcontent/file",method=RequestMapping.post)
public String getFileContents(@RequestParam("file",required=false) byte [] fileName){
     //---------------------
     // 
}

我试过这个代码,但是得到415错误.

@RequestMapping(value = "/getcontent/file",method = RequestMethod.POST,consumes="multipart/form-data")
public @ResponseBody String getContentFromBytes(@RequestBody MultipartFormDataInput input,Model model) {
    logger.info("Get Content. "); 
  //------------
   }

客户端代码 – 使用apache HttpClient

private static void executeClient() {
    HttpClient client = new DefaultHttpClient();
    HttpPost postReqeust = new HttpPost(SERVER_URI + "/file");

    try{
        // Set Various Attributes
        MultipartEntity multipartEntity = new MultipartEntity();
        multipartEntity.addPart("fileType",new StringBody("DOCX"));

        FileBody fileBody = new FileBody(new File("D:demo.docx"),"application/octect-stream");
        // prepare payload
        multipartEntity.addPart("attachment",fileBody);

        //Set to request body
        postReqeust.setEntity(multipartEntity);

        HttpResponse response = client.execute(postReqeust) ;

        //Verify response if any
        if (response != null)
        {
            System.out.println(response.getStatusLine().getStatusCode());
        }

    }
    catch(Exception ex){
        ex.printStackTrace();
    }

解决方法

您可以创建如下所示的休息服务.
@RequestMapping(value="/upload",method=RequestMethod.POST)
    public @ResponseBody String handleFileUpload( 
            @RequestParam("file") MultipartFile file){
            String name = "test11";
        if (!file.isEmpty()) {
            try {
                byte[] bytes = file.getBytes();
                BufferedOutputStream stream = 
                        new BufferedOutputStream(new FileOutputStream(new File(name + "-uploaded")));
                stream.write(bytes);
                stream.close();
                return "You successfully uploaded " + name + " into " + name + "-uploaded !";
            } catch (Exception e) {
                return "You failed to upload " + name + " => " + e.getMessage();
            }
        } else {
            return "You failed to upload " + name + " because the file was empty.";
        }
    }

而客户端做如下.

import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpVersion;
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.ContentBody;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.util.EntityUtils;


public class Test {
  public static void main(String[] args) throws Exception {
    HttpClient httpclient = new DefaultHttpClient();
    httpclient.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION,HttpVersion.HTTP_1_1);

    HttpPost httppost = new HttpPost("http://localhost:8080/upload");
    File file = new File("C:UsersKamalDesktopPDFServlet1.pdf");

    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody cbFile = new FileBody(file,"multipart/form-data");
    mpEntity.addPart("file",cbFile);


    httppost.setEntity(mpEntity);
    System.out.println("executing request " + httppost.getRequestLine());
    HttpResponse response = httpclient.execute(httppost);
    HttpEntity resEntity = response.getEntity();

    System.out.println(response.getStatusLine());
    if (resEntity != null) {
      System.out.println(EntityUtils.toString(resEntity));
    }
    if (resEntity != null) {
      resEntity.consumeContent();
    }

    httpclient.getConnectionManager().shutdown();
  }
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读