REST API-状态代码为415的HTTP文件上传



Hi-im构建一个REST API来上传文件。

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.http.HttpEntity;

@Path("/api")
public class RestAPI {
private final String UPLOADED_FILE_PATH = "C:/ProgramData/XXXX/";
@GET
public String getFile() {

return "Loading File...";
}
@POST
@Path("/image-upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadFile(HttpEntity input) throws IOException {
// Do stuff
return Response.status(200).entity("Uploaded file name : " + "").build();
}

上传程序类别:

import java.io.File;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.mime.MultipartEntityBuilder;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
public class DemoFileUploader {
public static void main(String args[]) throws Exception {
DemoFileUploader fileUpload = new DemoFileUploader();
File file = new File("C:/Users/tdr/Desktop/TestFile.txt");
// Upload the file
fileUpload.executeMultiPartRequest("http://localhost:8080/MediaHandler/mediahandler/api/image-upload",
file, file.getName(), "File Uploaded :: TestFile.txt");
}
public void executeMultiPartRequest(String urlString, File file, String fileName, String fileDescription)
throws Exception {
// default client builder
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost postRequest = new HttpPost(urlString);
try {
FileBody fileBody = new FileBody(file, ContentType.DEFAULT_BINARY);
// Set various attributes
HttpEntity multiPartEntity = MultipartEntityBuilder.create()
.addPart("fileDescription",
new StringBody(fileDescription != null ? fileDescription : "",
ContentType.MULTIPART_FORM_DATA))
.addPart("fileName", new StringBody(fileName != null ? fileName : file.getName(),
ContentType.MULTIPART_FORM_DATA))
.addPart("attachment", fileBody).build();
// Set to request body
postRequest.setEntity(multiPartEntity);
System.out.println("Sending Request....");
System.out.println("Request: " + postRequest);
System.out.println("Request Entity: " + postRequest.getEntity().getContentType());
// Send request
CloseableHttpResponse response = httpClient.execute(postRequest);
System.out.println("Request executed.");
// Verify response if any
if (response != null) {
System.out.println("Response Status Code: " + response.getStatusLine().getStatusCode());
System.out.println("Response: " + response);
System.out.println("Response Entity: " + response);
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}

我得到以下输出:

正在发送请求。。。。请求:POSThttp://localhost:8080/MediaHandler/mediahandler/api/image-上传HTTP/1.1请求实体:内容类型:多部分/表单数据;边界=eINJSk3ptTJP7wf-cXlS-uznnNML99FyFmlet请求已执行。响应状态代码:415响应:HTTP/1.1415[内容类型:text.html;字符集=utf-8,内容语言:de,内容长度:785,日期:2021年3月31日星期三12:19:35 GMT,保持活动:超时=20,连接:保持活动]响应实体:HTTP/1.1415[内容类型:text.html;字符集=utf-8,内容语言:de,内容长度:785,日期:2021年3月31日星期三12:19:35 GMT,保持活动:超时=20,连接:保持活动]

我试着遵循我发现的所有示例,但它们都与我的代码相似。你们能告诉我虫子在哪里吗?

我发送了一个multipart/form数据,而我的restapi正在期待multipart/formdata。。。

你能删除这个注释吗:

@Consumes(MediaType.MULTIPART_FORM_DATA)

或请求标头必须包含内容类型:MediaType.MULTIPART_FORM_DATA

最新更新