// 上传图片及图片调用add方法
public String add(HttpServletRequest request, HttpServletResponse response, Page page) {
//用来接收上传图片的名字
Map<String,String> params = new HashMap<>();
//用来接收上传的图片调用下面的parseUpload方法
InputStream is = super.parseUpload(request, params);
//从HashMap中得到图片名
String name= params.get("name");
//实例化上传对象
Category c = new Category();
c.setName(name);
categoryDAO.add(c);
//获取存储图片路径
File imageFolder= new File(request.getSession().getServletContext().getRealPath("img/category"));
//建立文件虚拟路径
File file = new File(imageFolder,c.getId()+".jpg");
try {
if(null!=is && 0!=is.available()){
try(FileOutputStream fos = new FileOutputStream(file)){
byte b[] = new byte[1024 * 1024];
int length = 0;
while (-1 != (length = is.read(b))) {
fos.write(b, 0, length);
}
fos.flush();
//通过如下代码,把文件保存为jpg格式,这段代码可以复制粘贴不需要理解
BufferedImage img = ImageUtil.change2jpg(file);
ImageIO.write(img, "jpg", file);
}
catch(Exception e){
e.printStackTrace();
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return "@admin_category_list";
}
public InputStream parseUpload(HttpServletRequest request, Map<String, String> params) {
InputStream is =null;
使用Apache文件上传组件处理文件上传步骤:
try {
//创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
//创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 设置上传文件的大小限制为10M,当上传的文件大小超过缓冲区的大小时,就会
//生成一个临时文件存放到指定的临时目录当中。
factory.setSizeThreshold(1024 * 10240);
//使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List集合,每一个
//list存储的对象对应一个Form表单的输入项
List items = upload.parseRequest(request);
//使用迭代器遍历list
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
//判断文件是否是普通表单
if (!item.isFormField()) {
// item.getInputStream() 获取上传文件的输入流
is = item.getInputStream();
} else {
//上传key名
String paramName = item.getFieldName();
//上传key对应的value
String paramValue = item.getString();
//将value转码
paramValue = new String(paramValue.getBytes("ISO-8859-1"), "UTF-8");
//将文件名及对应的key储存到HashMap中
params.put(paramName, paramValue);
}
}
} catch (Exception e) {
e.printStackTrace();
}
//返回图片数据流
return is;
}
//通过如下代码,把文件保存为jpg格式
public static BufferedImage change2jpg(File f) {
try {
java.awt.Image i = Toolkit.getDefaultToolkit().createImage(f.getAbsolutePath());
PixelGrabber pg = new PixelGrabber(i, 0, 0, -1, -1, true);
pg.grabPixels();
int width = pg.getWidth(), height = pg.getHeight();
final int[] RGB_MASKS = { 0xFF0000, 0xFF00, 0xFF };
final ColorModel RGB_OPAQUE = new DirectColorModel(32, RGB_MASKS[0], RGB_MASKS[1], RGB_MASKS[2]);
DataBuffer buffer = new DataBufferInt((int[]) pg.getPixels(), pg.getWidth() * pg.getHeight());
WritableRaster raster = Raster.createPackedRaster(buffer, width, height, width, RGB_MASKS, null);
BufferedImage img = new BufferedImage(RGB_OPAQUE, raster, false, null);
return img;
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
javaweb图片和图片名上传代码及详解
最新推荐文章于 2024-06-03 23:10:45 发布