request.getInputStream() 图片变大
时间: 2023-12-27 13:10:25 浏览: 70
调用 `request.getInputStream()` 可以获取 HTTP 请求的请求体内容,如果请求体中包含图片数据,那么在读取请求体时就会将图片数据读取进来,从而导致图片变大。
如果你需要上传图片,可以使用 `multipart/form-data` 格式来上传,这种格式支持上传文件和表单数据。在 Java Servlet 中,可以使用 `Apache Commons FileUpload` 库来处理文件上传,它提供了 `ServletFileUpload` 类来解析 `multipart/form-data` 格式的请求。你可以通过以下代码来处理文件上传:
```java
// Check that we have a file upload request
boolean isMultipart = ServletFileUpload.isMultipartContent(request);
if (isMultipart) {
// Create a new file upload handler
ServletFileUpload upload = new ServletFileUpload();
// Parse the request
FileItemIterator iter = upload.getItemIterator(request);
while (iter.hasNext()) {
FileItemStream item = iter.next();
String name = item.getFieldName();
InputStream stream = item.openStream();
if (item.isFormField()) {
// Process regular form field (not a file)
String value = Streams.asString(stream, "UTF-8");
// ...
} else {
// Process file field
String fileName = item.getName();
// ...
}
}
}
```
这个代码片段使用 `ServletFileUpload` 类来解析上传的文件和表单数据。如果请求是 `multipart/form-data` 格式,那么就会进入到 `if (isMultipart)` 的代码块中。在这个代码块中,首先创建了一个 `ServletFileUpload` 对象,然后调用 `getItemIterator(request)` 方法来获取 `FileItemIterator` 对象,接下来就可以通过 `FileItemIterator` 对象逐个处理上传的表单项。对于文件项,可以通过 `FileItemStream` 的 `getName()` 方法获取文件名,通过 `openStream()` 方法获取文件内容的输入流。注意,`FileItemStream` 对象可能会包含多个部分,例如文件名和文件内容,你需要逐个处理这些部分。
阅读全文