文件映像到Servlet失败

Jas*_*son 8 java servlets spring-mvc

我正在尝试将图像上传到servlet,但在自动化测试期间,它每隔一段时间就会无声地失败.

你们知道这会导致什么吗?

这是服务器上的代码:

    @ResponseBody
    @RequestMapping(method = RequestMethod.POST)
    public String upload(HttpServletRequest request) throws Exception {
     BufferedImage image = null;

     @SuppressWarnings("unchecked")
     List<FileItem> items = new ServletFileUpload(
           new DiskFileItemFactory()).parseRequest(request);

    Logger.log(LogLevel.INFO, "Upload contains " + items.size()
            + " items.");
    int i = 0;
    for (FileItem item : items) {
        Logger.log(LogLevel.INFO, "\tItem " + (i++) + ". Name:\t"
                + item.getName() + ", Type:\t" + item.getContentType());

        // File is of type "file"
        if (!item.isFormField()) {
            InputStream inputStream = null;
            try {
                inputStream = item.getInputStream();
                if (inputStream.available() == 0) {
                    Logger.log(LogLevel.WARN,
                            "Item shows file type, but no bytes are available");
                }
                image = ImageIO.read(inputStream);
                if (image != null) {
                    break;
                }
            } catch (Exception e) {
                Logger.log(LogLevel.ERROR,
                        "There was an error reading the image. "
                                + ExceptionUtils.getFullStackTrace(e));
                throw new Exception("image provided is not a valid image");
            } finally {
                if (inputStream != null) {
                    IOUtils.closeQuietly(inputStream);
                }
            }
        }
    }

     if (image == null) {
        Logger.log(LogLevel.ERROR, "Image was supposedly read correctly, but was null afterwards");
        throw new Exception("Image provided could not be read");
     }

     //do stuff with image
     ...
    }
Run Code Online (Sandbox Code Playgroud)

这是测试:

 public void testImageUpload throws Exception {
    HttpPost httppost = new HttpPost("path/to/endpoint");
    File file=new File(imgLoc);
    FileBody bin = new FileBody(file);
    StringBody comment = new StringBody("Filename: " + file);

    MultipartEntity reqEntity = new MultipartEntity();
    reqEntity.addPart("upload-file", bin);
    reqEntity.addPart("comment", comment);
    httppost.setHeader("Accept", "application/json");
    httppost.setHeader("Connection","Keep-Alive");
    httppost.setEntity(reqEntity);
    HttpResponse response =testClient.getClient().execute(httppost);
    imgResponse=response.getStatusLine().toString();
    System.out.println(imgResponse);
    BufferedReader reader = new BufferedReader(
           new InputStreamReader(response.getEntity().getContent()));
    String line;
    while ((line = reader.readLine()) != null){
       output = output + " " +line;}
    System.out.println("Image Response: "+output);
}
Run Code Online (Sandbox Code Playgroud)

以下是服务器失败时的输出:

2013/10/02 05-53-32,287::LOG:INFO[com.example#upload:L130 -- Upload contains 2 items.]
2013/10/02 05-53-32,288::LOG:INFO[com.example#upload:L133 --        Item 0. Name:   Dog.jpg, Type:  application/octet-stream]
2013/10/02 05-53-32,288::LOG:WARN[com.example#upload:L140 -- Item shows file type, but no bytes are available]
2013/10/02 05-53-32,289::LOG:INFO[com.example#upload:L133 --        Item 1. Name:   null, Type:     text/plain; charset=ISO-8859-1]
2013/10/02 05-53-32,290::LOG:ERROR[com.example#upload:L159 -- Image was supposedly read correctly, but was null afterwards]
Run Code Online (Sandbox Code Playgroud)

我们从图像上传中捕获异常并将响应代码422发送回客户端,因此在测试中,我们得到imgResponse== 422,这是一个失败的情况.

注意:这只是发生有时你运行测试.

Pra*_*ran 0

您的内容类型似乎是应用程序/八位字节流。请在您的请求中添加以下标头并尝试

("Content-Type", "multipart/form-data");
Run Code Online (Sandbox Code Playgroud)