关于在java的web项目中,FileOutputStream 相对路径的问题

关于在java的web项目中,FileOutputStream 相对路径的问题,第1张

ServletActionContext就能获得class所在路径,通过然后获取再获取父目录不就是你要的目录了吗,在web项目中获取目录只能从servletActionContext入手。或者使用request。requestgetServletContext()getRealPath("")

你具体指的是JSP吧,其实关于另存对话框显示是浏览器自行决定的,即:一个url的跳转如果浏览器检测到这个url指向的是一个文件流那么就会显出另存为的对话框。具体的方式时前台一个 超链接<a href="url">,url指向后台的servlet(struts对应action,等其他的业务逻辑)。而后台的实现方式:把文件流输出到reponse的输出流中。具体代码为:

public static void downloadFile(>

mappath :存在web服务器上的指定虚拟路径相对应的物理文件路径(即你存放在网站中的文件夹的路径)

filename :前台一个控件,type="file",name="filename",此控件可进行选择并获取其路径(这里的路径是原来的路径,如:D:\\某文件夹,所以这里把此路径改为mappath,方便读取)

整句话:就是把原来的路径改为网站中的文件夹的路径,然后可存放到数据库,进行读取

下面给你提供一个实现,该实现采用了代理模式。这个实现包含两个文件,分别是Clientjava和ImageIcoProxyjava,ImageIcoProxyjava负责了的延迟加载,你可以修改为不延迟即可。

Clientjava的代码为:

import javaawtGraphics;

import javaawtInsets;

import javaxswingIcon;

import javaxswingJFrame;

public class Client extends JFrame {

private static int IMG_WIDTH = 510;

private static int IMG_HEIGHT = 317;

private Icon imgProxy = null;

public static void main(String[] args) {

Client app = new Client();

appsetVisible(true);

}

public Client() {

super("Virture Proxy Client");

imgProxy = new ImageIcoProxy("D:/testjpg", IMG_WIDTH, IMG_HEIGHT);

thissetBounds(100, 100, IMG_WIDTH + 10, IMG_HEIGHT + 30);

thissetDefaultCloseOperation(JFrameEXIT_ON_CLOSE);

}

public void paint(Graphics g) {

superpaint(g);

Insets insets = getInsets();

imgProxypaintIcon(this, g, insetsleft, insetstop);

}

}

ImageIcoProxyjava的代码为:

import javaawtComponent;

import javaawtGraphics;

import javaxswingIcon;

import javaxswingImageIcon;

import javaxswingSwingUtilities;

public class ImageIcoProxy implements Icon {

private ImageIcon realIcon = null;

private String imgName;

private int width;

private int height;

boolean isIconCreated = false;

public ImageIcoProxy(String imgName, int width, int height) {

thisimgName = imgName;

thiswidth = width;

thisheight = height;

}

public int getIconHeight() {

return realIcongetIconHeight();

}

public int getIconWidth() {

return realIcongetIconWidth();

}

public void paintIcon(final Component c, Graphics g, int x, int y) {

if (isIconCreated) {

//已经加载了,直接显示

realIconpaintIcon(c, g, x, y);

gdrawString("Just Test", x + 20, y + 370);

} else {

gdrawRect(x, y, width-1, height-1);

gdrawString("Loading photo", x+20, y+20);

synchronized(this) {

SwingUtilitiesinvokeLater(new Runnable() {

public void run() {

try {

ThreadcurrentThread()sleep(2000);

realIcon = new ImageIcon(imgName);

isIconCreated = true;

} catch (Exception e) {

eprintStackTrace();

}

crepaint();

}

}

);

}

}

}

}

以img标签来开头,在网页的主体部分(即HTML的<body>部分)找到你想要插入的位置。

在这里写下<img>标签。这是一个空标签,创建的是被引用图像的占位空间。

同时在HTML中,<img> 标签是没有结束标签的。您需要将插入的放在两个尖括号之中。

示例:<img src="文件路径/名称">

出于安全原因, js不能访问客户端资源 所以js写不了客户端文件 使用file类i-n-p-u-t标签可以在浏览器上实现浏览客户端文件系统, 但是只能获取文件名, 路径对于js是不可见的 所以你的方法是实现不了的

实现导出文件的通常做法是在后台生成好文件后, 将url重定向到已生成的文件或使用异步方法返回文件url在前台使用i-f-r-a-m-e打开, 这样就能直接下载 之后根据客户端的设置, 是下载还是直接调用关联程序打开文档 以xls文件为例, 客户端已安装office, 大多数浏览器是会直接代开该文件的, 可以在excel中另存到任意路径 不过这些就不是js所能控制的了

后台代码实现方面, 直接在网站目录下生成文件当然方便, 但是存在安全方面的问题, 因为静态url无法控制访问权限 最好是将文件生成在网站文件系统意外的独立区域存储, 将下载事务包装成动态页面, 读取文件使用b-i-n-a-r-y方式写入r-e-s-p-o-n-s-e(注意根据文件类型正确写入c-o-n-t-e-n-t Type, 这样浏览器才能正确识别为文件下载) 这样做的好处显而易见, 不管是安全方面还是其他逻辑都可自由扩展

尼玛, 好多禁用的词汇, 回答js相关的问题各种河蟹

以上就是关于关于在java的web项目中,FileOutputStream 相对路径的问题全部的内容,包括:关于在java的web项目中,FileOutputStream 相对路径的问题、Java:如何在前台显示"另存为"对话框,然后后台获取用户选择的路径呢、file.saveas server.mappath(filename) 什么意思 ,说的具体一些,谢谢了,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9636934.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存