写不出来就跑路 2024-04-22 16:06 采纳率: 33.3%
浏览 14

springboot使用Jersey客户端上传文件到服务器报错

springboot使用Jersey客户端上传文件到服务器报错
报错结果如图

img

tomcat服务器可写权限已经打开,server.xml也配置了如图的

img

uploads文件夹里也没有冲突的文件名或者文件夹。

img

网上实在找不到别的办法了,求解答。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 优质创作者: Java、后端开发技术领域 2024-04-22 16:09
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题描述 当使用Spring Boot和Jersey客户端上传文件时,会出现报错: java.lang.IllegalArgumentException: Illegal character in path at index .. 尽管Tomcat服务器可写权限已经打开,并且uploads文件夹里也没有冲突的文件名或者文件夹。 解决方案 可能是由于上传的文件名包含非法字符所致。 在文件名中包含以下字符可能会导致问题: / \ ? % * : | " < > 为了解决这个问题,我们可以使用文件名解析方法进行转义。 在Jersey客户端上传文件时,可以使用MultiPartFeature和FormDataMultiPart类上传文件。 代码示例 以下是一个简单的示例,演示如何使用Jersey客户端上传文件: 1.在Spring Boot应用程序中添加以下依赖项: org.glassfish.jersey.media jersey-media-multipart 2.29.1 2.编写Jersey客户端代码: import org.glassfish.jersey.media.multipart.FormDataBodyPart; import org.glassfish.jersey.media.multipart.FormDataMultiPart; import org.glassfish.jersey.media.multipart.MultiPartFeature; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.io.File; public class FileUploader {
    private static final String UPLOAD_URL = "http://localhost:8080/myapp/upload";
    public void uploadFile(File fileToUpload) {
        Client client = ClientBuilder.newBuilder().register(MultiPartFeature.class).build();
        // Request entity for a multipart POST request
        FormDataMultiPart multiPart = new FormDataMultiPart();
        multiPart.bodyPart(new FormDataBodyPart("file", fileToUpload, MediaType.APPLICATION_OCTET_STREAM_TYPE));
        // Response from the service
        Response response = client.target(UPLOAD_URL).request().post(Entity.entity(multiPart, multiPart.getMediaType()));
        // Response status
        int status = response.getStatus();
        System.out.println("Response Status: " + status);
        // Response body
        String responseBody = response.readEntity(String.class);
        System.out.println("Response Body: " + responseBody);
        // Close the client connection
        client.close();
    }
    

    } 在上面的代码中,FileUploader 类使用 Jersey 客户端上传文件。要上传文件,请使用 FormDataMultiPart 类将文件实体添加到请求正文并将其发送到后端服务。 需要注意的是,这里我们使用 Entity.entity(multiPart, multiPart.getMediaType()) 将 formData 实体作为内容发送到服务器端。 可以使用以下代码调用上述上传方法: File fileToUpload = new File("path/to/file"); FileUploader fileUploader = new FileUploader(); fileUploader.uploadFile(fileToUpload); 这将上传给定文件并将响应内容输出到控制台。 总结 当使用Spring Boot和Jersey客户端上传文件到服务器时,可能会遇到“java.lang. IllegalArgumentException:在索引处的路径中非法字符…”错误。 该问题可以通过使用文件名解析方法转义文件名来解决。 Jersey客户端可使用 MultiPartFeature 和 FormDataMultiPart 类上传文件。

    评论

报告相同问题?

问题事件

  • 修改了问题 4月22日
  • 创建了问题 4月22日