首页 > 解决方案 > Android:retrofit2 和 multipart 的问题

问题描述

当我尝试将文件上传到后端时遇到问题。我要上传的文件是图像。在后端,我有下一个代码来获取它:

@Context private javax.servlet.http.HttpServletRequest hsr;    
    @PersistenceContext private EntityManager em;
    
    @PostConstruct
    private void buildTree() {
        String contextName=hsr.getContextPath().substring(1);
        System.out.println("contextName: "+contextName);
        String folderNames[]={"img"};
        
        FileUtils.generateFolderTree(contextName, folderNames);
    }
    @Path("/uploadFile")
    @POST
    @Consumes("multipart/form-data")
    public Response uploadFile(MultipartFormDataInput input) {
        System.out.println("uploadFile: "+hsr.getRemoteAddr());
        Response httpResponse;
        if(SecUtils.checkAuthorization(hsr, em, "student")) {
            httpResponse=FileUtils.uploadFile(input);//9S: Recoger el fichero recibido como contenido multipart, escribirlo en la ubicación por defecto y crear el httpResponse correspondiente 
        }
        else {
            httpResponse=Response.status(401).entity("WRONG CREDENTIALS").build();
        }
        return httpResponse;        
    }

正如您所看到的,它消耗类型为 multipart/form-data 的数据,我尝试使用下一个 android java 函数上传它:

API CALL 改造2

    @Multipart
    @POST("uploadFile")
    Call<ResponseBody> uploadSolution(@Part MultipartBody.Part file);

我通过以下方式使用它:


 public void uploadSolution(InputStream is, String name) throws IOException {
        byte[] data = new byte[is.available()];
        is.read(data);
        RequestBody file = RequestBody.create(MediaType.parse("application/octet-stream"),data);
        MultipartBody.Part part = MultipartBody.Part.createFormData("file", name, file);
        Response<ResponseBody> response=api.uploadSolution( part).execute();
        Log.d("foto", Integer.toString(response.code()));
    }


如您所见,我正在测试获取响应代码的响应,并得到 500 代码。

有人知道我做错了什么吗?

谢谢你的支持!

标签: javaandroidretrofit2multipartform-data

解决方案


推荐阅读