Spring:文件上传 RESTFUL Web 服务 [英] Spring : File Upload RESTFUL Web Service
问题描述
我正在使用 Spring 4.0 为 RESTFUL Web 服务创建 POC.如果我们只传递 String 或任何其他基本数据类型,它工作正常.
I am creating POC for RESTFUL Web service using Spring 4.0. It is working fine if we pass only String or any other basic dataype.
@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);
//----------------------------------------
}
这很好用.但是如果我想将字节流或文件对象传递给函数,我该如何编写具有这些参数的函数?以及如何编写具有传递字节流的客户端?
This works fine. but If I want to pass byte stream or File Object to function, How can i write this function having these parameters? and How can I write Client having provision of passing byte stream?
@RequestMapping(value="/upload/file", method=RequestMapping.post)
public String uploadFile(@RequestParam("file", required=false) byte [] fileName){
//---------------------
//
}
我尝试了此代码,但收到 415 错误.
I tried this code but getting 415 Error.
@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
Client Code - Using 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();
}
推荐答案
您可以创建如下所示的休息服务.
You can create your rest service like below.
@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.";
}
}
对于客户端,请执行以下操作.
And for the client side do like below.
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 服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!