spring:文件上传RESTFUL Web服务

我正在使用Spring 4.0为RESTFUL Web服务创建POC。如果仅传递String或任何其他基本数据类型,则效果很好。

@RequestMapping(value="/upload/file", method=RequestMapping.post)

public String uploadFile(@RequestParam("fileName", required=false) String fileName){

logger.info("initialization of object");

//----------------------------------------

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

//----------------------------------------

}

这很好。但是,如果我想将字节流或文件对象传递给函数,如何编写具有这些参数的函数?以及如何编写具有传递字节流功能的Client?

@RequestMapping(value="/upload/file", method=RequestMapping.post)

public String uploadFile(@RequestParam("file", required=false) byte [] fileName){

//---------------------

//

}

我尝试了此代码,但收到415错误。

@RequestMapping(value = "/upload/file", method = RequestMethod.POST, consumes="multipart/form-data")

public @ResponseBody String uploadFileContentFromBytes(@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:\\Users\\Kamal\\Desktop\\PDFServlet1.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();

}

}

以上是 spring:文件上传RESTFUL Web服务 的全部内容, 来源链接: utcz.com/qa/420327.html

回到顶部