精华内容
下载资源
问答
  • 点击图片实现更换头像的功能,并且可以得到上传图片的文件名,大小,类型。
  •  label1.Text = "3.jpg"; break;  case 3: pictureBox1.Image = imageList1.Images[3];  label1.Text = "4.png"; break;      default:MessageBox.Show("当前图片为最后一张");   this.Close();   ...

    1.绘制界面

    2.选择组件中的ImagesList

    3.右键,选择图像

    4.选择图像

    5.双击按钮进入编码界面。

    代码:

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace Windows2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }

            private void label1_Click(object sender, EventArgs e)
            {

            }

            private void pictureBox1_Click(object sender, EventArgs e)
            {

            }

            private void Form1_Load(object sender, EventArgs e)
            {
                pictureBox1.Image = imageList1.Images[0];
            }
            int i = 1;
            private void button1_Click(object sender, EventArgs e)
            {
               switch(i)                                                                                  
                {
                    case 1:pictureBox1.Image = imageList1.Images[1];
                        label1.Text = "2.jpg"; break;
                    case 2: pictureBox1.Image = imageList1.Images[2];
                        label1.Text = "3.jpg"; break;
                    case 3: pictureBox1.Image = imageList1.Images[3];
                        label1.Text = "4.png"; break;    
                    default:MessageBox.Show("当前图片为最后一张"); 
                        this.Close(); 
                        break;
                }             
                i++; 
            }
        }
    }

    6.运行查看

    展开全文
  • java 实现发送邮件(带中文附件名称)

    千次阅读 2018-11-23 16:17:55
    java 实现发送邮件(带中文附件名称) 代码如下: /** * 发送带附件的邮件 * * @param session 发件人信息 * @param from 发件人地址 * @param subject 邮件标题 * @param content 邮件内容 * @param reci....

      java 实现发送邮件(带中文附件名称)

    代码如下:

     /**
         * 发送带附件的邮件
         *
         * @param session    发件人信息
         * @param from       发件人地址
         * @param subject    邮件标题
         * @param content    邮件内容
         * @param recipients 收件人地址
         */
        public static void sendFileMail(Session session, String from, String recipients, String subject, String content, List<File> attachments) {
    
            MimeMessage message = new MimeMessage(session);
            try {
                System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
    
                // 创建多重消息
                Multipart multipart = new MimeMultipart();
    
                message.setFrom(new InternetAddress(from));
                // 邮件标题
                message.setSubject(subject);
                // 添加邮件正文
                BodyPart contentPart = new MimeBodyPart();
                contentPart.setContent(content, "text/html;charset=UTF-8");
                multipart.addBodyPart(contentPart);
    
                message.setSentDate(new Date());
                // 创建邮件的接收者地址,并设置到邮件消息中
                Address to = new InternetAddress(recipients);
                // Message.RecipientType.TO属性表示接收者的类型为TO
                message.setRecipient(Message.RecipientType.TO, to);
    
                // 添加附件的内容
                if (attachments != null) {
                    for (int i = 0; i < attachments.size(); i++) {
                        BodyPart attachmentBodyPart = new MimeBodyPart();
                        DataSource source = new FileDataSource(attachments.get(i));
                        attachmentBodyPart.setDataHandler(new DataHandler(source));
                        // MimeUtility.encodeWord可以避免文件名乱码
                        attachmentBodyPart.setFileName(MimeUtility.encodeText(attachments.get(i).getName()));
                        multipart.addBodyPart(attachmentBodyPart);
                    }
                }
    
                // 发送完整消息
                message.setContent(multipart);
    
                Transport.send(message);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }

    测试类如下:

     public static void main(String[] args) {
            Properties prop = new Properties();
            prop.put("mail.transport.protocol", "smtp");
            prop.put("mail.smtp.host", "smtp.163.com");
            prop.put("mail.smtp.auth", "true");
            final String smtpPort = "465";
            prop.setProperty("mail.smtp.port", smtpPort);
            prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
            prop.setProperty("mail.smtp.socketFactory.fallback", "false");
            prop.setProperty("mail.smtp.socketFactory.port", smtpPort);
            Session session = getSession(prop, "112@163.com", "123");
    
            File affix1 = new File("/Users/wangdandan/testfile/db777d64853a2177309a2c0836511779.jpg");
            File affix2 = new File("/Users/wangdandan/testfile/c12365db0c065735f156666813aa274a.jpg");
            File affix3 = new File("/Users/wangdandan/testfile/c779fa41271c2e576d699b3bc1d15bfa.jpg");
            File affix4 = new File("/Users/wangdandan/testfile/bac216e222e7e0a12a83c1ac43a366ed.jpg");
            List<File> tempList = new ArrayList<File>();
            List<File> attList = new ArrayList<File>();
            tempList.add(affix1);
            tempList.add(affix2);
            tempList.add(affix3);
            tempList.add(affix4);
            String name = "王二小(13314568990)体检报告"; //新文件名字
    
            try {
                // 把附件名称复制成想要的格式 格式:姓名(手机号)体检报告.jpg
                for (int i = 0; i < tempList.size(); i++) {
                    File file = tempList.get(i);
                    String filename = file.getAbsolutePath();
                    String copyFileName = filename.substring(filename.indexOf("/"), filename.lastIndexOf("/"));
                    copyFileName = copyFileName + "/" + name + (i + 1) + filename.substring(filename.indexOf("."));
                    FileUtil.copyFile(filename, copyFileName);
                    File copyFile = new File(copyFileName);
                    attList.add(copyFile);
                }
    
                // 发送邮件
                sendFileMail(session, "17610125993@163.com", "123@qq.com",
                        "XX集团-入职体检报告-王二小-13314568990", "王二小(13314568990)的近3个月体检报告详见附件!", attList);
    
                // 删除copy的文件
                for (int i = 0; i < attList.size(); i++) {
                    File file = attList.get(i);
                    FileUtil.deleteFile(file.getAbsolutePath());
                }
    
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }
    

    注意:中文附件名称有可能出现乱码,以下两行代码可以解决乱码问题。

    System.getProperties().setProperty("mail.mime.splitlongparameters", "false");
    attachmentBodyPart.setFileName(MimeUtility.encodeText(attachments.get(i).getName()));

     

    展开全文
  • Unicode反转字符文件名植入攻击实验 一、 实验目的  理解如何通过向对方发送伪造的 Microsoft Office Word 文档来植入木马程序的技术手段。  掌握利用 Unicode 反转字符特性来捆绑可执行木马构建恶意文档的方法...

    Unicode反转字符文件名植入攻击实验

    一、 实验目的
     理解如何通过向对方发送伪造的 Microsoft Office Word 文档来植入木马程序的技术手段。
     掌握利用 Unicode 反转字符特性来捆绑可执行木马构建恶意文档的方法。
     了解使用 System Safety Monitor(SSM)分析恶意文档的攻击流程。
    二、 实验原理

    1. Unicode反转字符串概述
      利用工具生成的“反转字符串”类型的后门程序,所利用的工具可以自动生成任意伪装后缀名的文件,例如:.txt、.jpg 、.mp3、常见类型文件。 “反转字符串”技术虽然在很久之前就被恶意代码作者利用过,但此技术的伪装性极高,一不小心点击了就有可能沦为肉鸡。
    2. Unicode反转字符文件名植入攻击原理
      通过查看文件类型,可以发现该文件的实际文件格式是应用程序或者可执行的屏幕保护程序,正常的图片显示为“JPEG图像”,而恶意程序则显示它真正的格式,例如EXE文件显示应用程序,SCR程序显示屏幕保护程序,如果细心的用户可以通过扩展名“.”前面的字符进行识别,因为这种反转一定在“.”前面有它真正的扩展名例如“exe”反转后依然为exe,而“src”反转后为rsc。 而真实的图片却没有发现可疑字符。
    3. Unicode反转字符文件名植入攻击防范。
        1、在文件夹中显示文件的“详细信息”,Win7系统在文件中按下“ALT”键,显示菜单栏,然后点击“查看”菜单的详细信息选项即可;2、隐藏文件扩展名;3、通过CMD命令显示文件名。
      三、实验环境
    4. 操作系统
        操作机:Windows_7
        目标机1:Windwos_Xp
        目标机2:Windows_7
        操作机默认用户名:administrator,密码:123456,IP地址:10.1.0.41
        目标机1默认用户名:administrator,密码:123456,IP地址:10.1.0.45
        目标机2默认用户名:administrator,密码:123456,IP地址:10.1.0.48
      2) 实验工具
        (1)WordReverseExp
        一款可以利用Unicode 反转字符特性来捆绑可执行木马构建恶意文档的工具
        (2)System Safety Monitor(SSM)
      System Safety Monitor (SSM)是一款对系统进行全方位监测的防火墙工具,它不同于传统意义上的防火墙,系针对操作系统内部的存取管理,因此与任何网络/病毒防火墙都是不相冲突的。
      四、实验步骤和内容
      1.1进入到实验工具目录,运行文件名反转字符利用工具(Exploit)WordReverseExp.exe在这里插入图片描述

    首先对该工具的使用方法作一下说明 :
    1)在正常文档中选择本机上存在的并想让目标对象打开显示的Office Word文件,例如C:\test.doc。
    2)在木马文件中选择让目标对象隐藏执行的代码程序,如"C:\Trojan.exe” 。
    3)在保存文件中输入最终生成的伪装成Office Word文档捆绑有木马程序的恶意文档名称,例如"import" 。
    4)最后点击确定按钮即可。
    1.2在利用工具的界面上点击“正常文档”输入框右侧的文件浏览按钮,选择工具同一目录下的"test.doc"文档。这里的"test.doc"的文档为一个测试用word文档,内容为"This is a testWord document for exploit."。
    1.3然后点击“木马文件”输入框右侧的文件浏览按钮,选择工具同一目录下的"Trojan.exe"可执行程序。这里的"Trojan.exe" 其实就是重命名的计算器程序(没有任何危害)。
    1.4然后点击“保存文件”输入框右侧的按钮,选择保存目录为“桌面”, 输入我们要生成的最终文档名称,比如为"important" 。这里的保存文件处会显示"important.exe" , 不用进行任何修改。这是因为最终生成的文档其实就是个可执行的EXE程序,只不过利用下文件名Unicode反转字符的特性伪造了用户名,使得用户看起来像个Doc文档样。
    1.5最后点击确定按钮,将会成功生成恶意文档。如下图所示:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    从表面上来看,最终生成的文件不是"imprrtant.exe" , 而是"importantocd.doc" , 其实这个Doc文件是个伪造的"scr” 可执行文件(屏幕保护程序),其真实的名字是"importantocd.scr", 标记"” 的地方是一个Unicode控制字符一 “RLO",意思是 “Start ofright-to-left override"即从右往左覆盖。这样使得用户看起来就变成了"importantocd.doc”。
    2.1在本地主机的“运行”编辑框中输入“mstsc”后回车,将打开远程桌面连接程序。
    2.2点击“选项”下拉框,切换到本地资源
    在这里插入图片描述

    2.3点击"本地设备和资源”组合框中的“详细信息”按钮,勾选“驱动器”选项后点击“确定”按钮返回。
    在这里插入图片描述

    2.4切换回到“常规”选项卡,在“登录设置"组合框的“计算机”编辑框中输入目标机的IP地址(此处目标机示例ip为10.1.0.41), 点击最下方的"连接”按钮。
    在这里插入图片描述

    2.5在远程桌面连接窗口中出现验证计算机身份的信息点击“是"” 按钮,进入登录认证界面输入用户名: administrator密码: 123456
    在这里插入图片描述

    2.6登录成功之后,将这个伪造的"importantocd.doc" 上传至目标主机,文件复制到目标机桌面。
    在这里插入图片描述

    2.7进入到目标机。先安装Microsoft Office Word 2003,然后再双击运行之前上传的"important" 文档。 能够看到如下图所示的Word被打开显示出来了,被捆绑的木马程序(这里为有界面的无害计算机程序)也同时偷偷运行起来了。
    在这里插入图片描述
    在这里插入图片描述

    2.8以同样的方法,将important文件复制到目标机2(Windows_7)的桌面
    在这里插入图片描述

    2.9运行important文件,查看运行后的状态。
    在这里插入图片描述

    五、实验总结
    通过本次实验,了解和认识了Unicode反转字符文件名植入攻击,学会了理解如何通过向对方发送伪造的 Microsoft Office Word 文档来植入木马程序的技术手段。掌握利用 Unicode 反转字符特性来捆绑可执行木马构建恶意文档的方法以及使用 System Safety Monitor(SSM)分析恶意文档的攻击流程,收获很大。

    展开全文
  • 本文详细讲解了SpringMVC实例单文件上传、多文件上传、文件列表显示、文件下载。 本文工程免费下载 一、新建一个Web工程,导入相关的包 springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar...

      林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

    本文详细讲解了SpringMVC实例单文件上传、多文件上传、文件列表显示、文件下载。

    本文工程免费下载

    一、新建一个Web工程,导入相关的包

    springmvc的包+commons-fileupload.jar+connom-io.jar+commons-logging,jar+jstl.jar+standard.jar

    整个相关的包如下:

    整个工程目录如下:

    二、配置web.xml和SpringMVC文件

    (1)web.xml

     

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    	id="WebApp_ID" version="3.0">
    	<!-- SpringMVC的前端控制器 -->
    	<servlet>
    		<servlet-name>MyDispatcher</servlet-name>
    		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    		<!-- 设置自己定义的控制器xml文件 -->
    		<init-param>
    			<param-name>contextConfigLocation</param-name>
    			<param-value>/WEB-INF/springMVC-servlet.xml</param-value>
    		</init-param>
    		<load-on-startup>1</load-on-startup>
    	</servlet>
    	<!-- Spring MVC配置文件结束 -->
    
    	<!-- 拦截设置 -->
    	<servlet-mapping>
    		<servlet-name>MyDispatcher</servlet-name>
    		<!-- 由SpringMVC拦截所有请求 -->
    		<url-pattern>/</url-pattern>
    	</servlet-mapping>
    	
    </web-app>

    (2)springMVC-servlet.xml文件

     

     

    <beans xmlns="http://www.springframework.org/schema/beans"
    	xmlns:context="http://www.springframework.org/schema/context"
    	xmlns:util="http://www.springframework.org/schema/util" 
    	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
    	 xmlns:mvc="http://www.springframework.org/schema/mvc"  
    	xsi:schemaLocation="  
    	    http://www.springframework.org/schema/util 
    	    http://www.springframework.org/schema/util/spring-util-3.0.xsd
    	    http://www.springframework.org/schema/mvc 
    	    http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/beans       
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
            http://www.springframework.org/schema/mvc    
            http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/context   
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
            
    	<!-- 把标记了@Controller注解的类转换为bean -->
    	<context:component-scan base-package="com.mucfc" />
    	<!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->
    	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
    		p:prefix="/WEB-INF/views/" p:suffix=".jsp"/>
    		  
    	<!-- 上传文件的设置 ,maxUploadSize=-1,表示无穷大。uploadTempDir为上传的临时目录 -->
       <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"  
            p:defaultEncoding="UTF-8"  
            p:maxUploadSize="5400000"  
            p:uploadTempDir="fileUpload/temp"  
         />  
    
    </beans>

     

     

     

    三、单个文件上传

    (1)控制器

     

    @Controller
    @RequestMapping("/file")
    public class FileController {
    
    	@RequestMapping("/toFile")
    	public String toFileUpload() {
    		return "fileUpload";
    	}
    
    	@RequestMapping("/toFile2")
    	public String toFileUpload2() {
    		return "fileUpload2";
    	}
    
    	/**
    	 * 方法一上传文件
    	 */
    	@RequestMapping("/onefile")
    	public String oneFileUpload(
    			@RequestParam("file") CommonsMultipartFile file,
    			HttpServletRequest request, ModelMap model) {
    
    		// 获得原始文件名
    		String fileName = file.getOriginalFilename();
    		System.out.println("原始文件名:" + fileName);
    
    		// 新文件名
    		String newFileName = UUID.randomUUID() + fileName;
    
    		// 获得项目的路径
    		ServletContext sc = request.getSession().getServletContext();
    		// 上传位置
    		String path = sc.getRealPath("/img") + "/"; // 设定文件保存的目录
    
    		File f = new File(path);
    		if (!f.exists())
    			f.mkdirs();
    		if (!file.isEmpty()) {
    			try {
    				FileOutputStream fos = new FileOutputStream(path + newFileName);
    				InputStream in = file.getInputStream();
    				int b = 0;
    				while ((b = in.read()) != -1) {
    					fos.write(b);
    				}
    				fos.close();
    				in.close();
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		}
    
    		System.out.println("上传图片到:" + path + newFileName);
    		// 保存文件地址,用于JSP页面回显
    		model.addAttribute("fileUrl", path + newFileName);
    		return "fileUpload";
    	}
    
    	/**
    	 * 方法二上传文件,一次一张
    	 */
    	@RequestMapping("/onefile2")
    	public String oneFileUpload2(HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
    		CommonsMultipartResolver cmr = new CommonsMultipartResolver(
    				request.getServletContext());
    		if (cmr.isMultipart(request)) {
    			MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) (request);
    			Iterator<String> files = mRequest.getFileNames();
    			while (files.hasNext()) {
    				MultipartFile mFile = mRequest.getFile(files.next());
    				if (mFile != null) {
    					String fileName = UUID.randomUUID()
    							+ mFile.getOriginalFilename();
    					String path = "d:/upload/" + fileName;
    
    					File localFile = new File(path);
    					mFile.transferTo(localFile);
    					request.setAttribute("fileUrl", path);
    				}
    			}
    		}
    		return "fileUpload";
    	}
    }
    

    (2)JSP,这个页面是用来上传又用来显示上传后的图片的页面fileUpload.jsp

     

     

     

     

    <%@ page language="java" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>用户上传图片页面</title>
     <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    	<center>
    		<form action="file/onefile"
    			method="post" enctype="multipart/form-data">
    			<input type="file" name="file" /> 
    			<input type="submit" value="上 传" />
    		</form>
    		<h5>上传结果:</h5>
    		<img alt="暂无图片" src="${fileUrl}" />
    	</center>
    </body>
    </html>

     

     

     

    现在运行后来看看效果,输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/toFile

    控制台输出结果,选择图片后

    原始文件名:Chrysanthemum.jpg
    上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/4eafc28c-4baa-4018-ac06-c4a5aec88d6cChrysanthemum.jpg

    图片已被上传,可以在JSP中显示出来

    来看看服务器的路径:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img

    表明图片已经上传到服务器

    方法二:

    使用文件流的方式来上传

     

    	/**
    	 * 方法二上传文件,一次一张
    	 */
    	@RequestMapping("/onefile2")
    	public String oneFileUpload2(HttpServletRequest request,
    			HttpServletResponse response) throws Exception {
    		CommonsMultipartResolver cmr = new CommonsMultipartResolver(
    				request.getServletContext());
    		if (cmr.isMultipart(request)) {
    			MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) (request);
    			Iterator<String> files = mRequest.getFileNames();
    			while (files.hasNext()) {
    				MultipartFile mFile = mRequest.getFile(files.next());
    				if (mFile != null) {
    					String fileName = UUID.randomUUID()
    							+ mFile.getOriginalFilename();
    					String path = "d:/upload/" + fileName;
    
    					File localFile = new File(path);
    					mFile.transferTo(localFile);
    					request.setAttribute("fileUrl", path);
    				}
    			}
    		}
    		return "fileUpload";
    	}

     

    	<center>
    		<form action="file/onefile"
    			method="post" enctype="multipart/form-data">
    			<input type="file" name="file" /> 
    			<input type="submit" value="上 传" />
    		</form>
    		<h5>上传结果:</h5>
    		<img alt="暂无图片" src="${fileUrl}" />
    	</center>

    中的

    <form action="file/onefile"

    改成

     

     

    <form action="file/onefile2"

     

    输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/toFile

     

     

    方法二指定上传到了本地E盘的upload文件夹

    页面结果

    四、多文件上传

    (1)控制器

     

    	@RequestMapping("/toFile2")
    	public String toFileUpload2() {
    		return "fileUpload2";
    	}

     

     

    	/**
    	 * 一次上传多张图片
    	 */
    	@RequestMapping("/threeFile")
    	public String threeFileUpload(
    			@RequestParam("file") CommonsMultipartFile files[],
    			HttpServletRequest request, ModelMap model) {
    
    		List<String> list = new ArrayList<String>();
    		// 获得项目的路径
    		ServletContext sc = request.getSession().getServletContext();
    		// 上传位置
    		String path = sc.getRealPath("/img") + "/"; // 设定文件保存的目录
    		File f = new File(path);
    		if (!f.exists())
    			f.mkdirs();
    
    		for (int i = 0; i < files.length; i++) {
    			// 获得原始文件名
    			String fileName = files[i].getOriginalFilename();
    			System.out.println("原始文件名:" + fileName);
    			// 新文件名
    			String newFileName = UUID.randomUUID() + fileName;
    			if (!files[i].isEmpty()) {
    				try {
    					FileOutputStream fos = new FileOutputStream(path
    							+ newFileName);
    					InputStream in = files[i].getInputStream();
    					int b = 0;
    					while ((b = in.read()) != -1) {
    						fos.write(b);
    					}
    					fos.close();
    					in.close();
    				} catch (Exception e) {
    					e.printStackTrace();
    				}
    			}
    			System.out.println("上传图片到:" + path + newFileName);
    			list.add(path + newFileName);
    
    		}
    		// 保存文件地址,用于JSP页面回显
    		model.addAttribute("fileList", list);
    		return "fileUpload2";
    
    	}

     

    其实就是在单文件上传的方法一中来修改的,只不过弄成了个循环

     

     

    (2)JSP显示页面fileUpload2.jsp

     

    <%@ page language="java" import="java.util.*" contentType="text/html; charset=UTF-8"
    	pageEncoding="UTF-8"%>
    <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <%
    	String path = request.getContextPath();
    	String basePath = request.getScheme() + "://"
    			+ request.getServerName() + ":" + request.getServerPort()
    			+ path + "/";
    %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>用户上传图片页面</title>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    </head>
    <body>
    	<center>
    		<form action="file/threeFile" method="post"
    			enctype="multipart/form-data">
    			<input type="file" name="file" /><br /> <input type="file"
    				name="file" /><br /> <input type="file" name="file" /><br /> <input
    				type="submit" value="上 传" />
    		</form>
    		<h5>上传结果:</h5>
    
    		<c:forEach items="${fileList}" var="imagename">
    				<img alt="暂无图片" src="${imagename}" />	<br/>
    		</c:forEach>
    
    
    
    	</center>
    </body>
    </html>

    注意这里用了

    </c:forEach>

    表单,需要jstl.jar+standard.jar

     

    (3)运行后输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/toFile2(注意上面是单文件没有后面的数字2)

    选择图片,然后点上传
     

    控制台输出结果:

    图片不清看文字 吧:

    原始文件名:Desert.jpg
    上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/2baccc77-43b6-4908-859d-507e86a04051Desert.jpg
    原始文件名:Hydrangeas.jpg
    上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/51ad04e0-82aa-4b2c-958d-f00651e9ed6bHydrangeas.jpg
    原始文件名:Jellyfish.jpg
    上传图片到:E:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\SpringMVCLearningChapter4_1\img/dee340d8-9cc0-41ae-9959-f7fa47ff172bJellyfish.jpg

    三张图片都可以显示出来了

    来看看服务器,这就是刚刚上传的三张

    五、上传文件列表显示

    (1)控制器

     

    	/**
    	 * 列出所有的图片
    	 */
    	@RequestMapping("/listFile")
    	public String listFile(HttpServletRequest request,
    			HttpServletResponse response) {
    		// 获取上传文件的目录
    		ServletContext sc = request.getSession().getServletContext();
    		// 上传位置
    		String uploadFilePath = sc.getRealPath("/img") + "/"; // 设定文件保存的目录
    		// 存储要下载的文件名
    		Map<String, String> fileNameMap = new HashMap<String, String>();
    		// 递归遍历filepath目录下的所有文件和目录,将文件的文件名存储到map集合中
    		listfile(new File(uploadFilePath), fileNameMap);// File既可以代表一个文件也可以代表一个目录
    		// 将Map集合发送到listfile.jsp页面进行显示
    		request.setAttribute("fileNameMap", fileNameMap);
    		return "listFile";
    	}

    (2)JSP文件listFile.jsp

     

     

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <!DOCTYPE HTML>
    <html>
      <head>
        <title>下载文件显示页面</title>
      </head>
      
      <body>
          <!-- 遍历Map集合 -->
        <c:forEach var="me" items="${fileNameMap}">
            <c:url value="/file/downFile" var="downurl">
                <c:param name="filename" value="${me.key}"></c:param>
            </c:url>
            ${me.value}<a href="${downurl}">下载</a>
            <br/>
        </c:forEach> 
      
      </body>
    </html>


    (3)运行后输入:http://localhost:8080/SpringMVCLearningChapter4_1/file/listFile       

     

    这些为刚刚上传到四张图片。

    六、文件下载

    (1)控制器

     

    	@RequestMapping("/downFile")
    	public void downFile(HttpServletRequest request,
    			HttpServletResponse response) {
    		System.out.println("1");
    		// 得到要下载的文件名
    		String fileName = request.getParameter("filename");
    		System.out.println("2");
    		try {
    			fileName = new String(fileName.getBytes("iso8859-1"), "UTF-8");
    			System.out.println("3");
    			// 获取上传文件的目录
    			ServletContext sc = request.getSession().getServletContext();
    			System.out.println("4");
    			// 上传位置
    			String fileSaveRootPath = sc.getRealPath("/img"); 
    			
    			System.out.println(fileSaveRootPath + "\\" + fileName);
    			// 得到要下载的文件
    			File file = new File(fileSaveRootPath + "\\" + fileName);
    			
    			// 如果文件不存在
    			if (!file.exists()) {
    				request.setAttribute("message", "您要下载的资源已被删除!!");
    				System.out.println("您要下载的资源已被删除!!");
    				return;
    			}
    			// 处理文件名
    			String realname = fileName.substring(fileName.indexOf("_") + 1);
    			// 设置响应头,控制浏览器下载该文件
    			response.setHeader("content-disposition", "attachment;filename="
    					+ URLEncoder.encode(realname, "UTF-8"));
    			// 读取要下载的文件,保存到文件输入流
    			FileInputStream in = new FileInputStream(fileSaveRootPath + "\\" + fileName);
    			// 创建输出流
    			OutputStream out = response.getOutputStream();
    			// 创建缓冲区
    			byte buffer[] = new byte[1024];
    			int len = 0;
    			// 循环将输入流中的内容读取到缓冲区当中
    			while ((len = in.read(buffer)) > 0) {
    				// 输出缓冲区的内容到浏览器,实现文件下载
    				out.write(buffer, 0, len);
    			}
    			// 关闭文件输入流
    			in.close();
    			// 关闭输出流
    			out.close();
    		} catch (Exception e) {
    
    		}
    	}


    这里就是通过文件流的方式来下载图片的。

     

    然后就可以自己选择下载的地方了。

    终于讲完了,花了大半天啊!

    本文工程免费下载

      林炳文Evankaka原创作品。转载请注明出处http://blog.csdn.net/evankaka

    更多技术请关注笔者微信技术公众号"单例模式"

    展开全文
  • js图片预览,上传,前端修改文件名

    千次阅读 2020-03-10 16:26:49
    //创建新文件对象(实现更名) var newfile = new File([file], new Date().getTime()+".jpg",{type:"image/jpeg"}); //以下为预览图片代码 var reader = new FileReader(); reader.onload = function (oFREvent) {...
  • userName:发件人邮箱 password:发件人邮箱密码 fromAddress:发件人邮箱 toAddress:收件人邮箱 //关键地方,图片显示的时候是 src="cid:logo",而logo又是在setContentID中指明的~
  • //注:如果fileName带路径,则会报错(文件名、目录名或卷标语法不正确) //如:fileName = “C:/upload/xxx.txt”就会报错,此时可以截取fileName的最后一部分,结果就不会再报错 File saveFile = new File(dir...
  • response setHeader 设置下载中文文件名乱码问题
  • 说起来Windows工作界面下的文件名简直是随心所欲,比如:某编辑部的2000年工作计划。文件名即可用中文直接表达,而且长度最长可达256个字符,让人看起来真是一目了然。然而在Windows环境中,安装的软件中却大量存在...
  • Python发送邮件,并在正文中显示附件中的图片 直接在HTML邮件中链接图片地址是不行的。引文大部分邮件服务商都会自动屏蔽带有外链的图片,因为不知道这些链接是否指向恶意网站。 只需要在HTML中通过引用src="...
  • 文件名后缀大全

    千次阅读 2014-05-10 22:07:53
    说起来Windows工作界面下的文件名简直是随心所欲,比如:某编辑部的2000年工作计划。文件名即可用中文直接表达,而且长度最长可达256个字符,让人看起来真是一目了然。然而在Windows环境中,安装的软件中却大量存在...
  • filename=Bluehills.jpg"); 如果文件中filename参数中有中文,则就会出现乱码。 解决办法: (1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行 (2)new String("中文"....
  • filename=Bluehills.jpg"); 如果文件中filename参数中有中文,则就会出现乱码。 解决办法: (1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行 (2)new String("中文".getBytes(...
  •  response.write s(0)&".jpg" &" "  fs. CopyFile Server.MapPath("旧文件名"),Server.MapPath("新文件名")   Next  End Sub   ShowFileList("H:/DATA/原E盘/产品库/1,Cabinet/") %>   ...
  • 在上传文件时,我们可以限定上传文件的大小,也可以限定上传文件的类型(如:只能上传jpg, gif格式),另外上传到服务器的文件名不要随机生成,由我们来指定。 模板文件代码 <!DOCTYPE html> <...
  • 1,如何发送文件,选用网络协议 能满足我们需求的协议是比较多的,UDP协议,TCP/IP协议,HTTP协议,由于TCP/IP协议的安全可靠,我选用TCP/IP协议,UDP虽然传输效率高,但不安全,也不是一种面向连接的,他并不能保证先发的数据...
  • filename=Bluehills.jpg"); 如果文件中filename参数中有中文,则就会出现乱码。 解决办法: (1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行 (2)new String("中文".getBytes(...
  • filename=Bluehills.jpg");   如果文件中filename参数中有中文,则就会出现乱码。 解决办法: (1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行 (2)new String("中文".getBytes("GB2312...
  • filename=Bluehills.jpg"); 如果文件中filename参数中有中文,则就会出现乱码。 解决办法: (1)MimeUtility.encodeWord("中文.txt");//现在版本的IE还不行 (2)new String("中文".getBytes("GB2312"),...
  • 关于Markdown图片无法显示的问题解决方法 版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_41223155/article/details/89672742 ...
  • 最近搜索了些在内存中转换图片格式的东西,比如截屏后的bmp图片在内存中转为jpg数据流,你可以通过socket发送这段jpg内存数据流,同时,你也可以通过内存数据流逆转换。通过DibFile.h里面的两个函数完成(用的是Gdi+...
  • 今天分享一下发送邮件。 在说今天最重要的部分之前,先说说pickle吧。 我觉得把一些隐私的数据放在pickle文件中是一个很好的方法。 比如我们今天用到的,发件人的邮箱,发件人的密码,收件人的邮箱。def ...
  • 嵌入式开发辅助工具_JPG图片转HEX工具1.JPG简介2.什么要用JPG图片?3.JPG图片转HEX 1.JPG简介 JPG一般指JPEG格式,JPEG(Joint Photographic Experts Group)是JPEG标准的产物,该标准由国际标准化组织(ISO)制订...
  • 发送带有附件的邮件

    千次阅读 2018-07-12 20:40:47
    啥都不说,代码如下:# 发送带有附件的邮件。 import smtplib from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime.multipart import MIMEMultipart, MIMEBase from email...
  • 服务器向客户端浏览器发送文件时,如果是浏览器支持的文件类型(如`.txt`、`.pdf`、`.sql`、`.jpg`、`.git`等),一般会默认使用浏览器打开,直接在浏览器中显示

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,476
精华内容 9,790
关键字:

发送jpg显示文件名