想要在服务器上扩展上传文件的模块。项目的骨架得到here。除了图片想要创建它们的缩略图。缩略图的大小在jsp页面上选择并发送到servlet。问题是我无法通过request.getParameter("name")
获取该参数。请指点我,我在哪里傻瓜。
JSP (我认为这就够了)
<form action="upload" method="post" enctype="multipart/form-data">
<input type="file" name="file" multiple id="file" onchange="check('file')"/><br>
<div id="set_thumbnail" style="display: none;">
<input type="checkbox" name="thumbnail" id="thumbnail" onclick="setVisible('thumbnail','sizeThumbnailInput')"/>
<label>Create thumbnail</label>
</div>
<select id="sizeThumbnailInput" name="sizeThumbnail" style="display: none">
<option value="0">SMALL(max 100x100px)</option>
<option value="1">MEDIUM(max 250x250px)</option>
<option value="2">BIG(max 620x620px)</option>
</select><br>
<input type="submit" value="upload" />
</form>
的Servlet
public class FileUploadHandler extends HttpServlet {
private final String UPLOAD_DIRECTORY = "g:\\point";
private boolean thumbnail;
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String path1 = "";
String path2= "";
String path = "";
if (request.getParameter("thumbnail")!= null & request.getParameter("thumbnail").equals("on")){
thumbnail = true;
}
//process only if its multipart content
if(ServletFileUpload.isMultipartContent(request)){
try {
List<FileItem> multiparts = new ServletFileUpload(
new DiskFileItemFactory()).parseRequest(request);
for(FileItem item : multiparts){
System.out.println(item.getFieldName());
if(!item.isFormField()){
String name = new File(item.getName()).getName();
if (item.getName().length() < 3 || item.getSize() < 3){
request.setAttribute("message", "File is wrong or not assigned.");
request.getRequestDispatcher("/index.jsp").forward(request, response);
return;
}
path1 = UPLOAD_DIRECTORY + File.separator + name;
item.write( new File(path1));
if (thumbnail){
path2 = UPLOAD_DIRECTORY + File.separator + "thumbnail_" + item.getName();
ResizePicture resPicture = new ResizePicture(path1, path2, ResizePicture.PictureTemplate.SMALL_IMAGE);
resPicture.resize();
}
path = path1 + "\n" + path2;
}
}
request.setAttribute("message", "File Uploaded Successfully\n" + path);
} catch (Exception ex) {
request.setAttribute("message", "File Upload Failed due to " + ex);
ex.printStackTrace();
}
}else{
request.setAttribute("message",
"Sorry this Servlet only handles file upload request");
}
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
java.lang.NullPointerException
被抛出
if (request.getParameter("thumbnail")!= null & request.getParameter("thumbnail").equals("on")){
答案 0 :(得分:4)
如果您执行condition1 & condition2
,则始终会评估两个条件(因此在您的示例中,参数“thumbnail”可以是null
)。您必须使用condition1 && condition2
,因为只有在condition2
为condition1
时才会评估true
此致
答案 1 :(得分:0)
您正在使用&
的上述答案中已经提到了NPE的原因,因此将评估这两个条件。用&&
替换它将解决问题。
您也可以使用替代方案,以避免NPE和!= null
检查,
if ( "on".equals(request.getParameter("thumbnail")) ) {
// Do the rest.
}
答案 2 :(得分:0)
有两种可能的机会