gpt4 book ai didi

java - 如何使用 Jersey WS 从服务器中的文件夹获取图像?

转载 作者:行者123 更新时间:2023-11-30 04:05:35 28 4
gpt4 key购买 nike

我正在学习 Jersey Web 服务,现在我了解了 GET 和 POST 的工作原理:

 @GET
@Produces("text/html")
public String getHandler() {
return "<h1>Get some REST!<h1>";
}

@POST
@Consumes("application/x-www-form-urlencoded")
@Produces("text/plain")
public String postHandler(String content) {
return content;
}

在 Jersey 文档中有关获取图像的内容中提到:

@GET
@Path("/images/{image}")
@Produces("image/*")
public Response getImage(@PathParam("image") String image) {
if (!isSafeToOpenFile(image)) {
throw new IllegalArgumentException("Cannot open the image file.");
}

File f = new File(image);

if (!f.exists()) {
throw new WebApplicationException(404);
}

String mt = new MimetypesFileTypeMap().getContentType(f);
return Response.ok(f, mt).build();
}

如果您能向我展示一个使用上述代码从服务器中的文件夹中获取图像并将其发布到 html 中的示例,我将不胜感激。非常感谢。

最佳答案

这是基于 REST 服务的实时画廊的完整示例。

REST 服务( Jersey )

此服务提供图像服务器目录的内容(文件名)(此处 C:\Temp\hotfolder )。

    // array of supported extensions 
static final String[] EXTENSIONS = new String[] { "jpg", "jpeg", "gif", "png", "bmp" };

// filter to identify images based on their extensions
static final FilenameFilter IMAGE_FILTER = new FilenameFilter() {

@Override
public boolean accept(final File dir, final String name) {
for (final String ext : EXTENSIONS) {
if (name.endsWith("." + ext)) {
return (true);
}
}
return (false);
}
};

@GET
@Path("folderImages")
@Produces("text/json")
public Response getFolderImages(@QueryParam("lastknown") String lastknown)
{
//Gets the contents of the folder (reverse order : more recent first)
//see http://stackoverflow.com/questions/11300847/load-and-display-all-the-images-from-a-folder
File dir = new File("C:\\Temp\\hotfolder");
File [] files = dir.listFiles(IMAGE_FILTER);
Arrays.sort( files, new Comparator<File>() {
public int compare(File f1, File f2) {
if (f1.lastModified() > f2.lastModified()) {
return -1;
} else if (f1.lastModified() < f2.lastModified()) {
return +1;
} else {
return 0;
}
}
});
//Fills a list (from the more recent one, until the last known file)
ArrayList<String> newfiles = new ArrayList<String>();
for (File f : files)
{
if (lastknown!=null && f.getName().equals(lastknown))
break;
newfiles.add(f.getName());
}
//Answers the list as a JSON array (using google-gson, but could be done manually here)
return Response.status(Status.OK).entity(new Gson().toJson(newfiles)).type("text/json").build();
}

这也是图像服务,需要单独渲染每个图像。

    @GET
@Path("/images/{image}")
@Produces("image/*")
public Response getImage(@PathParam("image") String image) {
File f = new File("C:\\Temp\\hotfolder\\" + image);
if (!f.exists()) {
throw new WebApplicationException(404);
}
String mt = new MimetypesFileTypeMap().getContentType(f);
return Response.ok(f, mt).build();
}

gallery.html

Html,需要一点 JQuery 的帮助。此 HTML 每 5 秒轮询一次,如果有比上次已知的文件新的文件(更新的),则请求服务。瞧!

您可以注意到我们正在使用 jquery .prepend方法在图库 div 的开头动态插入图像。

<html>
<head>
<title>Folder demo</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
</head>
<body>
<h1>Live gallery</h1>
<div id="gallery1" style="border:1px solid black;padding:10px;"></div>
<div id="info1"></div>
<script>
var counter = 0;
var lastknown = "";
function doPoll(){
$.get('rest/folderImages?lastknown='+lastknown, function(data) {
counter++;
$("#info1").html("<pre>Counter: " + counter + "<br>New files: " + data + "</pre>");
for (var i=data.length-1; i>=0; i--) {
$("#gallery1").prepend("<img src=\"rest/images/" + data[i] + "\" style=\"width:200px;height:200px\" />");
lastknown = data[i];
}
setTimeout(doPoll,5000);
});
}
$(document).ready( doPoll );
</script>
</body>
</html>

关于java - 如何使用 Jersey WS 从服务器中的文件夹获取图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20804522/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com