当前位置: 首页 > 知识库问答 >
问题:

状态代码为415的REST API-HTTP Fileupload

山森
2023-03-14

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();
        }
    }
}

我得到以下输出:

发送请求....请求:POST http://localhost:8080/mediahandler/mediahandler/api/image-upload http/1.1请求实体:content-type:multipart/form-data;已执行boundary=einjsk3ipttjp7wf-cxls-uznnngml99fyfmlet请求。响应状态代码:415响应:HTTP/1.1 415[Content-Type:text/html;charset=UTF-8,Content-Language:de,Content-Lengte:785,日期:Wed,2021年3月31日12:19:35GMT,keep-alive:Timeout=20,连接:keep-alive]响应实体:HTTP/1.1 415[Content-Type:Text/html;charset=UTF-8,Content-Language:de,Content-Lengte:785,日期:Wed,2021年3月31日12:19:35GMT,keep-alive:Timeout=20,连接:

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

我正在发送一个多部分/表单数据,我的restapi正在期待多部分/表单数据...

共有1个答案

储峻
2023-03-14

您能删除此注释吗:

@Consumes(MediaType.MULTIPART_FORM_DATA)

或者请求头必须包含内容类型:mediatype.multipart_form_data

 类似资料:
  • 我正在将一些代码移动到Web API中,我只希望接受完美的请求(按顺序发送数据、按顺序发送所有头等),并拒绝其他请求。现在我有了它,如果一个完美的请求进来,那么它返回一个正确的输出,带有一个200 OK状态代码,如果一个错误的请求进来(也就是一个未正确欺骗的请求),那么它返回一个404 not FOUND。 我的控制器中的函数都有一个带有FromBody属性的参数,所以这意味着如果请求使用内容类型

  • 我在向我创建的RESTful web服务提交多部分/表单数据时遇到了一些麻烦。我试图通过RESTful web服务上传媒体文件(图像、视频、音频)。我在谷歌上搜索寻找最好的方法,发现发布多部分/表单数据是最好的解决方案。 问题是当我开机自检一些多部分/表单数据时,我在Tomcat服务器中收到此错误消息: 我尝试在stackoverflow上寻找答案,问题似乎是很多人都缺少一个mimepull.ja

  • 问题内容: 我现在将脚本更改为jquery。这是我的旧javascript: 我现在想将其更改为jquery-ajax: 像在旧脚本中一样,如何测试请求返回的状态码(和responseText)? 问题答案: 试试这个: 要么:

  • 使用指南 - 账户管理 - 站点管理 - 首页代码状态的意义 统计自动对网站首页代码进行检查,新建站点的状态是“未发起检查”,可手动刷新状态。百度统计会按照用户提供的网站首页地址,通过请求回的结果判断首页代码的安装情况 首页代码检查状态总共包括6个状态: 1. 代码安装正确 若该网站首页有多套代码,将告知其他代码的来源站点。 2. 未检测到代码 提示信息:该页面无任何百度统计代码请求,请按要求安装