qq_32016061 2018-10-15 01:50
浏览 360

通过Struts2下载ftp图片文件,图片花屏。不知道怎么回事

图片说明

在ftp上图片是正常的,下载后就是这个样子。

这是下载文件部分代码

 @ParentPackage("framework-default")
@Action(value = "ueditorController", results = { @org.apache.struts2.convention.annotation.Result(name = { "success" }, type = "stream", params = {
        "contentType", "application/octet-stream", "inputName",
        "fileInputStream", "contentDisposition", "attachment;filename=${name}" }) })
public class UeditorControllerAction extends ActionSupport {
    private static final long serialVersionUID = -271242185203136724L;
    private File[] upfile; // 文件名
    private String[] upfileFileName;
    private String[] upfileContentType;// 文件类型
    private String path;
    private String type;
    private String upfileType;
    private int size; // 文件大小
    private String name;

    public String downloadFile() throws Exception {
        // if (StringUtils.isEmpty(name)) {
        // name = new String(URLDecoder.decode(
        // URLDecoder.decode(name, "utf-8"), "utf-8")
        // .getBytes("UTF-8"), "ISO-8859-1");// 进行转码,必须两次编码和两次解码才能保证不同服务器上均不乱码
        // } else {
        // name = path;
        // }
        RichTextConfig config = RichTextConfig.getInstance();
        if (config == null) {
            LogUtil.getFrameworkLoger().error("没有找到图片上传的ftp服务器");
        }
        FTPFileHandler handler = new FTPFileHandler();
        try {
            handler.connect(config.getHost(), config.getUser(),
                    config.getPassword(), config.getPort());
        } catch (Exception e) {
            LogUtil.getFrameworkLoger().error("连接ftp服务器失败", e);
        }
        InputStream inputstream = null;
        try {
            inputstream = handler.downloadInputStream(path, "");
        } catch (Exception e) {
            LogUtil.getFrameworkLoger().error("下载文件失败", e);
        }
        ActionContext.getContext().getValueStack()
                .set("fileInputStream", inputstream);
        return "success";
    }


}

获取文件流代码

 /**
     *下载文件流
     * @param remoteFileName 文件名
     * @param path 路径 
     */
    public InputStream downloadInputStreamForFTP(String remoteFileName, String path) {
        InputStream in = null;
        try {
            ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftpClient.changeWorkingDirectory(path);
            ftpClient.enterLocalPassiveMode();
            in = ftpClient.retrieveFileStream(remoteFileName);
        } catch (FileNotFoundException e) {
            throw new RuntimeException("服务器不存该目录",e);
        } catch (IOException e) {
            throw new RuntimeException("下载的文件不存在",e);
        }
        return in;
    }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
    • ¥15 YoloV5 第三方库的版本对照问题
    • ¥15 请完成下列相关问题!
    • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
    • ¥15 求daily translation(DT)偏差订正方法的代码
    • ¥15 js调用html页面需要隐藏某个按钮
    • ¥15 ads仿真结果在圆图上是怎么读数的
    • ¥20 Cotex M3的调试和程序执行方式是什么样的?
    • ¥20 java项目连接sqlserver时报ssl相关错误
    • ¥15 一道python难题3