我是 struts2 的新手。
我使用struts2在系统指令中上传视频文件,但是当我想访问Html5文件中的上传内容以播放上传的视频文件时,我无法播放。 我在D:/ dk中的当前上传目录。但是当我把这条路径放在html代码中时,它就不起作用了。
行动类
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URL;
import java.sql.Connection;
import javax.servlet.ServletContext;
import org.apache.commons.fileupload.FileUploadBase.FileSizeLimitExceededException;
import org.apache.struts2.util.ServletContextAware;
import com.opensymphony.xwork2.ActionSupport;
public class FileUpload1 extends ActionSupport implements ServletContextAware {
private File userImage;
private String userImageContentType;
private String userImageFileName;
private ServletContext context;
public String execute() {
try {
String path = context.getInitParameter("FileUploadPath");
FileInputStream in = null;
FileOutputStream out = null;
in = new FileInputStream(getUserImage());
String destFileName = path;
File destFile = new File(destFileName);
destFile.setReadable(false);
if (!destFile.isDirectory()) {
destFile.mkdir();
}
out = new FileOutputStream(new File(destFile+"\\"+userImageFileName));
byte[] buffer = new byte[1024];
int c;
while ((c = in.read(buffer)) != -1) {
out.write(buffer,0,c);
}
if (null != in)
in.close();
if (null != out)
out.close();
return "success";
} catch (Exception e) {
e.printStackTrace();
addActionError(e.getMessage());
return "input";
}
}
public File getUserImage() {
return userImage;
}
public void setUserImage(File userImage) {
this.userImage = userImage;
}
public String getUserImageContentType() {
return userImageContentType;
}
public void setUserImageContentType(String userImageContentType) {
this.userImageContentType = userImageContentType;
}
public String getUserImageFileName() {
return userImageFileName;
}
public void setUserImageFileName(String userImageFileName) {
this.userImageFileName = userImageFileName;
}
@Override
public void setServletContext(ServletContext arg0) {
context = arg0;
}
}
的web.xml
<context-param>
<param-name>FileUploadPath</param-name>
<param-value>D:\Dk</param-value>
</context-param>
<filter>
<filter-name>f1</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>f1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
index.jsp
<html>
<head>
<script type="text/javascript" src="jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="html5lightbox.js"></script>
</head>
<body>
<a href="C:\Users\asus\Desktop\video1.mp4" class="html5lightbox" title="Altoopa">
<img src="images/Playing-Altoopa.png"/>
</a>
</body>
</html>
我的问题是如何将上传视频的路径放在<a href....>
标记中。我上传的文件位置为D:/Dk/dd.mp4
。
答案 0 :(得分:0)
浏览器只访问Web应用程序公开的内容,而不是访问服务器硬盘上的任意位置 - 想象一下提供对服务器的全权访问意味着什么?!
相反,您需要从操作中对其进行流式传输,例如,使用stream
结果类型,或者将服务器配置为允许访问特定资产目录等。
锚标记的href需要指向操作,并提供足够的信息来检索文件。您可以通过URL参数提供文件名,使用REST样式参数等
如果你要直接写回应(IMO是一个坏主意),你需要设置内容类型和可能的长度等等。我认为stream
结果类型会更好,不过
不相关,但你的行动课做得太多了;除了execute
方法之外,文件IO工作应该在某个地方完成,比如在服务或实用程序类中。