gpt4 book ai didi

java - 后端与前端之间的文件(完整示例)

转载 作者:太空狗 更新时间:2023-10-29 16:38:46 25 4
gpt4 key购买 nike

我正在将文件 URL 传递到前端。问题是 url 仅对服务器可用 (settings.dockerIP()),因为用户没有连接到 docker。

所以我需要一种方法将我的 url 转换成一个文件,然后将它发送给所有在后端的用户..

我当前的代码是这样的(它可以工作,但用户需要一个到 docker 主机的隧道)

Controller

 @RequestMapping("/report")
public ModelAndView report(HttpServletRequest request) {
String environmentName = request.getParameter("name");
ModelAndView model = new ModelAndView("report");
model.addObject("file", Report.getFileFromContainer(environmentName));

return model;
}

 public static String getFileFromContainer(String environmentName) {
Container container = getContainerID(environmentName);
String url = "";
if(container != null) {
Settings settings = Settings.getSettings();
url = "http://" + settings.getDockerIP() + ":" + settings.getDockerPort() + "/containers/" + container.getId() + "/archive?path=/path/file";
}
return url;
}

前端

 <a href="${file}"></a>

最佳答案

您可以创建一个方法,将文件作为流返回,然后将最后一个的 url 分配给您的链接按钮,

@RequestMapping(value="getFile", method=RequestMethod.GET)
public void getFile(HttpServletResponse response,HttpServletRequest request) {
String environmentName = request.getParameter("name");
//here the code to get your file as stream
//whether getting the file by Ressource or buffred ,
//here for example I named a getfileStream() method wihch return your file InputStream
InputStream myStream = getFileStream(environmentName);


// Set the content type and attachment header add filename and it's extention.
response.addHeader("Content-disposition", "attachment;filename=myfile.myExtention");
response.setContentType("txt/plain");

// copy your file stream to Response
IOUtils.copy(myStream, response.getOutputStream());
response.flushBuffer();
}

为了获取名称parameter,您只需将其传递给/report Controller 中的modelview,然后将其分配给您的关联 。

如下:

@RequestMapping("/report")
public ModelAndView report(HttpServletRequest request) {
String environmentName = request.getParameter("name");
ModelAndView model = new ModelAndView("report");
model.addObject("name", environmentName);

return model;
}

那么你的链接会是这样的:

<a href="<c:url value="/getFile" />?name=${name}">Get file</a>

getFileStream 可能是这样的:

public InputStream getFileStream(String environmentName) {
Container container = getContainerID(environmentName);
String url = "";
if(container != null) {
Settings settings = Settings.getSettings();
url = "http://" + settings.getDockerIP() + ":" + settings.getDockerPort() + "/containers/" + container.getId() + "/archive?path=/path/file";
}
InputStream is = new URL(url).openStream();

return is;
}

为了使用 IOUtils,您必须将以下 appace common io 添加到您的项目中

<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>

关于java - 后端与前端之间的文件(完整示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49231645/

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