无法将图片存入tomcat

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法将图片存入tomcat相关的知识,希望对你有一定的参考价值。

我用的是myeclipse+tomcat6开发web 很低端的一个小项目_(:3」∠)_做的是一个注册登录和管理系统,注册时候在action里 保存图片的核心代码是
public String execute()
String realpath = ServletActionContext.getServletContext().getRealPath(
"/images");
String filename = CreateId.getStringId()//这里的Createid是以当日时刻命名文件
+ imageFileName.substring(imageFileName.lastIndexOf("."));

File savefile = new File(new File(realpath), filename);
try
FileUtils.copyFile(image, savefile);
catch (IOException e)
// TODO Auto-generated catch block
e.printStackTrace();

RDao rd = new RDao();
rd.R(ub,filename);
return "su";

并在tomcat本项目根目录下建了一个images文件夹存图片;
之后无论我怎么调用图片都是好用的。

但是但凡我重启了电脑之后,再点开myeclipse运行tomcat之后这个文件夹就没了。。期间没有重新部署过
这是哪里出的错?有什么解决办法么?

由于你的文件夹并非是创建在项目中的,当你的项目被重新编译过后,tomcat会重新加载你的项目,所以images文件夹就不见了。

问题再现:

    在tomcat服务器的当前项目中创建一个文件夹images

    myeclipse中点击Project-->clean 选择当前项目 -->ok

    启动tomcat服务,然后你就会发现你的images文件夹没有了

解决方案:在项目的根目录下创建该文件夹。

补充一下:myeclipse启动项里面有重新编译选项,所以每次重启myeclipse都会被重新编译。

追问

在项目根目录下的话那我保存图片的地址该怎么写?

参考技术A 保存失败,那会报Exception看看后台是什么错误信息

(DELPHI)已经存入SQLSERVER中的图片数据(image字段)太大,怎么直接在数据库中压缩?或怎么用程序实现

存数据的时候没有考虑大小限制,所有图片都是分辨率极高的,现实使用中不需要这么高分辨率的图片,怎么用最简单的方法压缩数据库里的图片信息。
查了一些资料 发现没有什么简单的方法 只能写程序取出来 再压缩像素 再存入数据库。

怎么压缩像素?

delphi 的图像缩放示例代码如下:

//将图片缩放至指定大小
procedure SizeBmp(const Source, Dest: string; const x, y: integer);
var
  aBmp, bBmp: tbitmap;
  scalex, scaley: real;
begin
  aBmp := TBitmap.Create;
  bBmp := TBitmap.Create;
  try
    aBmp.LoadFromFile(Source);
    scaley := aBmp.Height / y;
    scalex := aBmp.Width / x;
    bBmp.Width := round(aBmp.Width / scalex);
    bBmp.Height := round(aBmp.Height / scaley);
    bBmp.PixelFormat := pfDevice;
    SetStretchBltMode(bBmp.Canvas.Handle, COLORONCOLOR);
    StretchBlt(bBmp.Canvas.Handle, 0, 0, bBmp.Width, bBmp.Height,
      aBmp.Canvas.Handle, 0, 0, aBmp.Width, aBmp.Height, srccopy);
    bBmp.SaveToFile(Dest);
  finally
    aBmp.Free;
    bBmp.Free;
  end;
end;

procedure TForm1.btn1Click(Sender: TObject);
begin
  SizeBmp(\'e:\\1112.bmp\',\'e:\\1112_small.bmp\',640,480);
end;
参考技术A delphi里面有zlib这个单元,里面有压缩的函数TCompressionStream可以调用!参考下面的代码去处理吧!
var
SourceStream: TCompressionStream;
DestStream: TMemoryStream;
Count: Integer;
Begin
//获得图像流的原始尺寸
Count := CompressedStream.Size;
DestStream := TMemoryStream.Create;
SourceStream:=TCompressionStream.Create(CompressionLevel, DestStream);
Try
CompressedStream.SaveToStream(SourceStream);
//将原始流进行压缩, DestStream中保存着压缩后的流
SourceStream.Free;
CompressedStream.Clear;
//写入原始流的尺寸
CompressedStream.WriteBuffer(Count, SizeOf(Count));
//写入经过压缩的流
CompressedStream.CopyFrom(DestStream, 0);
finally
DestStream.Free;
end;
end;本回答被提问者和网友采纳
参考技术B DELPHI好像有个zip的第三方控件,你可以考虑把数据读出来,压缩后再存回去,然后,在需要使用的时候再把它解压。 参考技术C fg 参考技术D 没什么好办法,压缩好了再放进去。

以上是关于无法将图片存入tomcat的主要内容,如果未能解决你的问题,请参考以下文章

Delphi用ADOQuery将图片存入ACCESS,求一个示例。

(DELPHI)已经存入SQLSERVER中的图片数据(image字段)太大,怎么直接在数据库中压缩?或怎么用程序实现

关于JAVA~~~~ 如何将图片等大对象存入ORACLE中~~求详解!(代码)

怎么将图片导入matlab中?让图片出现在程序中?如果要存入matlab路径,该存入哪个路径?

图片如何存入数据库

求助c# winform中将图片存入数据库详细写法