gpt4 book ai didi

java - 如何将绝对路径转换为相对路径,以便可以从 img 标签引用它? java网络

转载 作者:太空宇宙 更新时间:2023-11-04 12:35:00 25 4
gpt4 key购买 nike

创建一个允许用户上传图像网络应用程序。该代码可以工作,但无法理解如何获取相对路径中的图像,以便可以从 img src=""标记引用它?

到目前为止,代码接受多部分请求并将文件存储在服务器上的绝对路径中,但这无法从 标记引用。

关于如何解决这个问题有什么想法吗?

UploadFile.java(servlet)

package userServlets;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
maxFileSize = 1024 * 1024 * 10, // 10MB
maxRequestSize = 1024 * 1024 * 50) // 50MB
@WebServlet("/UploadFile")
public class UploadFile extends HttpServlet {

private boolean isMultipart;

private static final long serialVersionUID = 1L;

public UploadFile() {
super();

}

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// get session
HttpSession session = request.getSession();

// get the save location for files that user uploads to web app
String appPath = request.getServletContext().getRealPath("/uploads");

// get the name of the currently logged in user
String user = session.getAttribute("loggedInUser").toString();

// create the user's own folder in uploads folder of server.
String directory = appPath + File.separator + user;
File fileSaveDir = new File(directory);
if (!fileSaveDir.exists()) {
fileSaveDir.mkdir();
}

// get the path of the users folder location as a file
File uploads = new File(
request.getSession().getServletContext().getRealPath("/uploads" + File.separator + user));

// Check if request is multipart, if not, sends user back to uplaod page
// (test.jsp)
isMultipart = ServletFileUpload.isMultipartContent(request);
if (!isMultipart) {
RequestDispatcher rd = request.getRequestDispatcher("test.jsp");
rd.forward(request, response);
}

// Suspicious looking stuff not too sure of but works i guess :/
DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setRepository(uploads);
ServletContext servletContext = this.getServletConfig().getServletContext();
File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");
factory.setRepository(repository);

ServletFileUpload upload = new ServletFileUpload(factory);

try {

List<FileItem> formItems = upload.parseRequest(request);

if (formItems != null && formItems.size() > 0) {
// iterates over form's fields
for (FileItem item : formItems) {
// processes only fields that are not form fields
if (!item.isFormField()) {
String fileName = new File(item.getName()).getName();
long sizeInBytes = item.getSize();
String filePath = uploads + File.separator + fileName;
File storeFile = new File(filePath);

// saves the file on disk
item.write(storeFile);
request.setAttribute("message", "Upload has been done successfully!");

request.setAttribute("filename", fileName);

// *STORE THIS IN DATABASE
request.setAttribute("filepath", filePath);

request.setAttribute("filesize", sizeInBytes);

}

}
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {

request.setAttribute("directory", directory);

RequestDispatcher rd = request.getRequestDispatcher("test.jsp");

rd.forward(request, response);

}

}

}

test.jsp(上传表单)

  <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<div class="jumbotron">

<div class="container">

<form method="post" enctype="multipart/form-data" action="UploadFile">


<input type="text" name="description" /> <input type="file"
name="file" /> <input type="submit" />


</form>


</div>


</div>
<h1>"${directory}"</h1>
<h1>"${message}"</h1>
<h1>"${filepath}"</h1>
<h1>"${filename}"</h1>
<h1>"${filetype}"</h1>
<h1>"${filesize}"</h1>

<img src="${filepath}">


<hr />
<div class="jumbotron">

<img alt="" src="hmmmmmm">

</div>




</body>
</html>

最佳答案

读完这篇文章后就明白了link

If you have full control over the images folder, then just drop the folder with all images, e.g. /images directly in servletcontainer's deploy folder, such as the /webapps folder in case of Tomcat and /domains/domain1/applications folder in case of GlassFish. No further configuration is necessary.

将文件拖放到 ide 中的 Web 应用程序文件夹中。 enter image description here

然后你就这样做 enter image description here

关于java - 如何将绝对路径转换为相对路径,以便可以从 img 标签引用它? java网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37421402/

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