Java Servlet与文件系统的交互:存储文件并生成用于客户端访问的URL
摘要Java Servlet与文件系统的交互:存储文件并生成用于客户端访问的URL,java,gwt,servlets,Java,Gwt,Servlets,摘要 我需要存储上传和服务器生成的图像,便携式和 可预测的路径,以便我的服务器代码知道这些映像存在的位置 我需要生成可以发送到客户端的这些图像的URL。这些URL将在HTML图像元素中使用 问题 我的web应用程序允许用户使用gwtupload(apachecommons)上传图像。此图像存储在服务器上,并将URL返回给客户端,以便显示图像。gwtupload提供了一个客户端方法来获取上传图像的URL。这在部署中起作用;以下方面不适用: 在某些情况下,必须裁剪上载的图像。这导致 由servle
- 在某些情况下,必须裁剪上载的图像。这导致 由servlet方法生成的新映像。我想储存这个 裁剪图像并返回(客户端)访问URL
- 然后,该图像被另一种方法用于生成另一个图像 形象。此方法必须知道的文件系统上的位置 以前上载(和/或裁剪)的图像。新网站的URL 然后必须将图像返回给客户端
public String[] generatePreview(String xml) {
PreviewManager manager = new PreviewManager();
String url;
try{
preview = manager.generatePreview(xml);
}
catch (Exception e){e.printStackTrace();}
//Create the preview directory
File folder = new File("previews");
if (!folder.exists()) folder.mkdir();
//The file to be written to
File output = new File(folder, "front.jpg");
ServletContext context = getServletContext();
String dataDir = context.getRealPath("previews");
try {
ImageIO.write(image, "jpg", output);
} catch (IOException e) {
e.printStackTrace();
}
url = "previews/" + output.getName();
return url;
}
@Override
public String cropBackground(int[] coord_pair, String relativePath) {
File backgroundsFolder = new File("backgrounds");
if (!backgroundsFolder.exists()) backgroundsFolder.mkdir();
ServletContext context = getServletContext();
String dataDir = context.getRealPath("backgrounds");
File current = new File(relativePath);
String croppedName = "cropped_" + relativePath.replace("./backgrounds/", "");
int x = coord_pair[0];
int y = coord_pair[1];
int width = coord_pair[2];
int height = coord_pair[3];
String croppedPath = null;
try {
croppedPath = imageCropper.createCroppedImage(current, "backgrounds", croppedName, x, y, width, height);
}
catch (IOException e){
e.printStackTrace();
}
current.delete();
return "backgrounds/" + croppedPath;
我知道我当前的“return”语句在部署中永远不会起作用:我需要正确地生成URL并作为字符串返回。对于问题的长度我很抱歉,但我想把我的问题说清楚 在Tomcat之外选择一个存储图像的目录。为每个上传或生成的图像分配一些唯一的ID,并将图像存储在此目录中(例如,ID作为文件名)
生成指向图像servlet的URL,该图像servlet将按此目录中的ID读取图像,并将图像的字节发送到servlet响应的输出流:
image.action?ID=theImageId
选择存储图像的目录:为确保写访问,我将使用用户的主目录(执行Tomcat进程的用户)通过抓取环境变量。我将使用文件名作为唯一ID。生成一个图像servlet的URL,该图像servlet将在此目录中按ID读取图像::让我澄清一下:我将使用一个URL构建我的图像小部件,该URL将为指定的文件名寻址该图像servlet,响应将是图像。GWT将处理显示此图像。我将如何与客户端通信URL?是否有某种方法可以生成/确定图像servlet的URL(我尚未创建)从上面的代码?如果是,则不需要客户端更改,因为我可以从上面的远程方法返回此URL。URL始终相同:http:////image.action?id=Thank 我想我明白需要什么了,我今天会做这件事,希望它能顺利进行。另一个问题:既然我在使用GWT,我应该使用G吗是为我的图像servlet创建WTRPC框架,还是创建一个传统的JavaEEservlet,让我的GWT代码可以与之通信?