图片上传技术
// Change the file path here filePath = getServletContext().getRealPath("/"); }
servlet 中使用到一个 ImageUtil 类,其中封装了图片处理的实用方法,用于读写图片,代码 如下:
ImageUtil.java java 代码
ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] b = new byte[1000]; while (stream.read(b) > 0){ baos.write(b); } byte[] imageByte = baos.toByteArray(); String type = ImageUtil.getImageType(imageByte); if (type.equals(ImageUtil.TYPE_NOT_AVAILABLE)) throw new Exception("file is not a image"); BufferedImage myImage = ImageUtil .readImage(imageByte); // display the image ImageUtil.printImage(myImage, type, res .getOutputStream()); // save the image // if you want to save the file into database, do it here // when you want to display the image, use the method printImage in I mageUtil item.write(new File(filePath + "\\" + m.group(1))); stream.close(); baos.close(); } catch (Exception e) { e.printStackTrace(); } } else { throw new IOException("fail to upload"); } } } catch (IOException e) { e.printStackTrace(); } catch (FileUploadException e) { e.printStackTrace(); }
* Initialization of the servlet. * * @throws ServletException * */ public void init() throws ServletException { if an error occure
121. 122. 123. 124. }
29. public void destroy() {
32. } 33. /** 34. * The doPost method of the servlet.
35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78.
1. package com.ek.servlet; 2. import java.awt.image.BufferedImage; 3. import java.io.ByteArrayOutputStream; 4. import java.io.File; 5. import java.io.IOException; 6. import java.io.InputStream; 7. import java.util.Iterator; 8. import java.util.List; 9. import java.util.regex.Matcher; 10. import java.util.regex.Pattern; 11. import javax.servlet.ServletException; 12. import javax.servlet.http.HttpServlet; 13. import javax.servlet.http.HttpServletRequest; 14. import javax.servlet.http.HttpServletResponse; 15. import mons.fileupload.FileItem; 16. import mons.fileupload.FileUploadException; 17. import mons.fileupload.disk.DiskFileItemFactory; 18. import mons.fileupload.servlet.ServletFileUpload; 19. import com.ek.image.ImageUtil; 20. public class FileUploadServlet extends HttpServlet { 21. /** 22. 23. * */
24. private static final long serialVersionUID = 1L; 25. private static String filePath = ""; 26. /** 27. 28. 30. 31. * Destruction of the servlet. */ super.destroy(); // Just puts "destroy" string in log // Put your code here
1. package com.ek.image; 2. import ponent; 3. import java.awt.Graphics2D; 4. import java.awt.GraphicsConfiguration; 5. import java.awt.GraphicsDevice; 6. import java.awt.GraphicsEnvironment; 7. import java.awt.Image; 8. import java.awt.MediaTracker; 9. import java.awt.image.BufferedImage; 10. import java.awt.image.ColorModel; 11. import java.awt.image.PixelGrabber; 12. import java.io.ByteArrayInputStream; 13. import java.io.IOException; 14. import java.io.InputStream; 15. import java.io.OutputStream; 16. import java.util.Iterator; 17. import javax.imageio.ImageIO; 18. import javax.imageio.ImageReader; 19. import javax.imageio.stream.MemoryCacheImageInputStream; 20. import net.jmge.gif.Gif89Encoder; 21. import mons.logging.Log; 22. import mons.logging.LogFactory; 23. import com.sun.imageio.plugins.bmp.BMPImageReader; 24. import com.sun.imageio.plugins.gif.GIFImageReader; 25. import com.sun.imageio.plugins.jpeg.JPEGImageReader; 26. import com.sun.imageio.plugins.png.PNGImageReader; 27. /** 28. * @author Erick Kong 29. * @see ImageUtil.java 30. * @createDate: 2007-6-22 31. * @version 1.0 32. */ 33. public class ImageUtil { 34.
48. public void doPost(HttpServletRequest req, HttpServletResponse res)
79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. } /** }
apache commons-fileupload 是一个很好的文件上传工具,最近使用 commons-fileupload 实现了图片的上传及显示,可将图片保存在指定的文件夹中,也可以将图片存放在数据库, 并支持四种常用的图片格式:jpg,png,gif,bmp。 首先,跟上传一般文件一样,需要写一个 servlet 来处理上传的文件,你可以修改保存 路径或选择将图片保存在数据库中,只需要做简单的修改就行了,servlet 代码如下: FileUploadServlet.java java 代码
* * This method is called when a form has its tag value method equals to * post. * * @param request * * * * */ throws ServletException, IOException { res.setContentType("text/html; charset=UTF-8"); DiskFileItemFactory factory = new DiskFileItemFactory(); // maximum size that will be stored in memory factory.setSizeThreshold(4096); // the location for saving data that is larger than getSizeThreshold() factory.setRepository(new File(filePath)); ServletFileUpload upload = new ServletFileUpload(factory); // maximum size before a FileUploadException will be thrown upload.setSizeMax(1000000); try { List fileItems = upload.parseRequest(req); Iterator iter = fileItems.iterator(); // Get the file name String regExp = ".+\\\\(.+\\.?())$"; Pattern fileNamePattern = pile(regExp); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { String name = item.getName(); long size = item.getSize(); if ((name == null || name.equals("")) && size == 0) continue; Matcher m = fileNamePattern.matcher(name); boolean result = m.find(); if (result) { try { // String type = // m.group(1).substring(m.group(1).lastIndexOf('.')+1); InputStream stream = item.getInputStream(); the request send by the client to the server the response send by the server to the client if an error occurred if an error occurred * @param response * @throws ServletException * @throws IOException
图片上传的设计与实现
┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊图片上传的设计与实现二.设计目的运用jsp开发工具和数据库开发一个小型的基于Web系统。
要求提交详细的设计说明书及各步骤所需图表和文档,对复杂的代码段和程序段,应画出程序流程图。
在界面设计中,画出每个窗口的布局。
通过本实践性教学环节,能较好地巩固jsp基本知识,jsp连接数据库实现动态网页。
三.需求分析如今时代,互联网已经进入我们的生活,而互联网上就有图片上传,显示,访问等等功能,有着很大的市场空间。
图片上传必须实现:1.数据库访问模块:利用JavaBean封装对数据库的操作,主要包括连接数据库、添加、删除、查询数据表、关闭连接等功能;2.上传模块:通过上传组件实现图片的上传。
3.显示模块:提供图片信息列表的显示效果。
4.查看模块:点击可以显示图片的内容。
四.总体设计图片上传是指客户端通过Web应用程序将本地图片资源传输到服务器上。
在客户端需要显示图片时,服务器端将图片通过网络以流的形式发送给客户端,然后利用不同的形式显示图片。
图片上传必须要对电子相册有,用户注册,用户注册,添加相片,修改相册,用户反馈,管理用户,如图1所示。
图1 总体设计┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1.文件上传组件介绍文件上传组件是一些开源组织发布的针对实现文件上传功能的一组class 文件。
jspSmartUpload和Apache的common-fileupload是两个比较流行的文件上传组件。
这两个组件都可以在JSP中实现文件上传。
本节使用Apache的common-fileupload组件实现图片上传。
2.HTML中文件上传组件介绍HTML中<input type="file"/>元素可以创建文件上传组件。
该控件带有一个文本框和浏览按钮。
使用该组件时要注意以下几点。
基于ASP.NET的图片上传技术
基于ASP.NET的图片上传技术作者:刘翼叶倩来源:《现代电子技术》2008年第10期摘要:目前的Web页面中都有许多图片,这些图片都是精心布局和设计的,使得整个页面看起来更精致美观。
而这些图片大部分的来源都是上传实现的。
在的应用中,也常需要服务器上传文档、图片等文件。
在ASP程序中,需要使用第三方组件才能有效地处理图片的上传;而在中,通过使用内置组件的方法即可将图片保存到服务器中。
从实际应用角度,介绍了在中图片上传技术的实现过程。
关键词:;图片上传;GetFileName方法中图分类号:TP391 文献标识码:B文章编号:1004-373X(2008)10-151-Abstract:At present,there are many pictures in the Web page,these pictures are arranged and designed painstakingly in order to make the whole page looked more exquisitely.And the mainer is often used to upload documents,pictures and so on.In the ASP programming,the third-party components are often used to make the uploading picture efficiently.However in the programming,the pictures can be seeded to the servers only by the internal components.From the practical point of view,thisKeywords:目前网络上有大量的图片,也许大家电脑里面也存了不少值得回忆的图片,特别是有些想拿出来展示给别人,让别人来分享自己的快乐。
移动应用开发中的图片上传与处理
移动应用开发中的图片上传与处理近年来,移动应用的普及和发展使得用户越来越需要通过应用程序来上传和处理图片。
无论是社交媒体应用、电子商务应用还是健身应用,图片上传和处理功能都扮演着重要的角色。
本文将探讨移动应用开发中的图片上传与处理,包括常用的图片上传方式、图片处理的方法和效果、以及一些值得注意的细节。
一、图片上传方式在移动应用开发中,常见的图片上传方式主要包括本地上传和云存储上传。
本地上传是指将用户手机或设备上的照片直接上传到应用的服务器。
这种方式便于用户将自己的照片分享给他人,如社交媒体应用中的朋友圈功能。
开发人员可以通过调用手机系统的相册功能,让用户选择需要上传的照片,并实现上传功能。
同时,为了提高用户体验,开发人员可以采用图片压缩的方式,减小上传的文件大小,加快上传速度。
云存储上传是指将用户上传的图片存储在云端,如云服务器或云存储服务商的服务器中。
这种方式可以避免应用服务器的存储压力,同时还可以提供灵活的存储方案和高可靠性。
开发人员可以使用第三方的云存储服务,如七牛云、阿里云等,通过接口实现图片的上传和存储功能。
通过云存储上传,开发人员还可以实现图片的异步处理,比如生成缩略图或水印。
二、图片处理方法和效果在移动应用中,图片处理常用的方法包括图片缩放、裁剪和滤镜效果等。
图片缩放是将图片的尺寸进行调整,在移动应用中常用于适应不同屏幕的显示需求。
开发人员可以根据设备的屏幕分辨率,通过代码对图片进行缩放操作,以确保图片在不同设备上显示的效果相同。
同时,为了避免图片失真,可以使用等比例缩放或保持宽高比例的缩放方式。
图片裁剪是指将图片的一部分进行截取或切割。
在实际应用中,经常需要对用户上传的图片进行裁剪,以满足应用的需要。
比如,在电子商务应用中,用户上传商品图片时,可能需要裁剪为统一的尺寸,以保证页面的美观性和一致性。
开发人员可以通过调用系统提供的裁剪工具,或使用第三方库实现图片的裁剪操作。
滤镜效果是目前很流行的图片处理方式,可以通过改变图片的颜色、对比度、亮度等参数,为图片增加特效。
线上PPT技术分享平台推荐与使用指南
线上PPT技术分享平台推荐与使用指南随着科技的不断进步,线上PPT技术分享平台逐渐成为了现代人工作、学习和交流的重要工具。
本文将为大家推荐几个优秀的线上PPT技术分享平台,并提供使用指南,帮助读者更好地利用这些平台。
一、平台推荐1. SlideShareSlideShare是全球最大的PPT分享平台之一,拥有庞大的用户群体和海量的PPT资源。
用户可以在SlideShare上浏览、上传和下载各种类型的PPT文档,从而进行知识的传播和分享。
该平台还支持在线编辑和演示PPT,方便用户进行实时的交流和互动。
2. PreziPrezi是一款创新的线上PPT制作工具,与传统的幻灯片不同,Prezi使用非线性的思维导图形式展示内容,使得PPT更具有层次感和视觉冲击力。
用户可以通过Prezi创建出富有动态效果的PPT,并且支持在线分享和演示。
Prezi的独特风格和丰富的功能使得它成为了许多演讲者和教育工作者的首选。
3. CanvaCanva是一款强大的在线设计工具,不仅可以制作PPT,还可以设计海报、名片、社交媒体封面等各种图形素材。
Canva提供了丰富的模板和元素,用户可以根据自己的需求进行自由的创作和编辑。
该平台还支持团队协作和分享,方便多人合作完成一个项目。
二、使用指南1. 注册账号在使用线上PPT技术分享平台之前,用户需要注册一个账号。
一般来说,注册过程非常简单,只需要提供基本的个人信息和邮箱地址即可。
注册完成后,用户可以根据自己的需要完善个人资料,例如上传头像、设置个性签名等。
2. 浏览和搜索注册完成后,用户可以开始浏览和搜索感兴趣的PPT文档。
大多数平台都提供了分类和标签功能,方便用户根据主题和关键词进行检索。
此外,一些平台还会根据用户的浏览历史和兴趣推荐相关的PPT,帮助用户发现更多有价值的内容。
3. 上传和分享如果用户有自己的PPT文档,可以选择将其上传到平台上与他人分享。
上传过程通常很简单,用户只需要选择要上传的文件,并填写相关的描述和标签。
移动应用开发中的图片上传和处理方法
移动应用开发中的图片上传和处理方法在如今的移动应用开发中,图片上传和处理是一个非常常见的需求。
无论是社交应用、电商应用还是个人相册应用,图片都扮演着重要的角色。
因此,合理有效地处理和上传图片对于提升用户体验和节约网络资源都至关重要。
本文将讨论一些移动应用开发中常用的图片上传和处理方法。
一、图片上传1. 传统上传方法传统的图片上传方法是将图片直接上传至服务器。
这种方式简单直接,只需将图片转化为二进制数据并发送至服务器。
然而,由于移动设备的网络环境较为不稳定,上传大图可能会遇到网络中断或者超时的问题。
为了解决这个问题,可以考虑对图片进行压缩再上传。
2. 图片压缩上传图片压缩上传是一种广泛采用的方法,通过降低图片的质量和大小来减少上传时间和带宽占用。
常用的压缩方法有:- 缩放压缩,即调整图片的尺寸。
通过将图片的像素减少或者调整图片的宽高比例,可以有效减小图片的大小。
- 质量压缩,即降低图片的清晰度。
采用这种压缩方法,不会改变图片的尺寸,但会减小图片的文件大小。
3. 云端上传云端上传是一种将图片先上传至云端存储,再将云端链接返回给客户端的上传方法。
这种方式可以有效提高上传速度和可靠性,减少服务器负担,同时还能支持大规模并发上传。
著名的云存储服务商如七牛、阿里云等提供了丰富的API,使得开发者能够快速集成图片上传功能。
二、图片处理1. 缩略图生成在移动应用中,为了提高加载速度和节省流量,通常会使用缩略图。
缩略图是对原始图片进行压缩和裁剪得到的一张小尺寸的图片。
常用的缩略图生成方法有:- 按比例缩放,根据需求将图片等比例缩放至合适的尺寸。
- 裁剪缩放,根据需求将图片裁剪为固定尺寸。
2. 图片滤镜图片滤镜是一种常见的图片处理方式,可以让用户对图片进行各种艺术化处理。
如黑白滤镜、复古滤镜、模糊滤镜等。
这些滤镜通常由预设的滤镜矩阵和算法实现。
3. 图片水印图片水印可以保护图片的版权,防止盗用和二次编辑。
水印可以是文字水印或者图片水印。
文件上传验证绕过技术总结
⽂件上传验证绕过技术总结⽂件上传验证绕过技术总结1.客户端验证绕过很简单啦,直接使⽤webscarab或者burp修改⼀下后缀名就⾏。
2.服务端验证绕过-Content-type检测若服务端检测⽂件类型时是检测Content-type的值,也很简单,在webscarab或者burp中修改Content-type。
如php中 if($_FILES['userfile']['type'] != “image/gif”) 即是检测Content-type值。
3.服务端验证绕过-扩展名检测a. 寻找漏⽹之鱼,如fckeditor 2.4.3 或之前版本的⿊名单中就可以上传诸如asa,cer之类的⽂件。
b. ⼤⼩写绕过,如aSp,pHp。
c. 特别⽂件名构造。
⽐如发送的http 包⾥把⽂件名改成help.asp. 或help.asp_(下划线为空格),这种命名⽅式在windows 系统⾥是不被允许的,所以需要在burp 之类⾥进⾏修改,然后绕过验证后,会被windows 系统⾃动去掉后⾯的点和空格。
e. 0×00截断绕过。
例如:help.asp .jpg(asp后⾯为0×00),在判断时,⼤多函数取后缀名是从后往前取,故能够通过,但是在保存时,却被保存为help.asp。
f. 双扩展名解析绕过攻击(1)如果上传⼀个⽂件名为help.php.123⾸先扩展名123 并没有在扩展名blacklist ⾥,然后扩展名123 也没在Apache 可解析扩展名list ⾥,这个时候它会向前搜寻下⼀个可解析扩展名,或搜寻到.php,最后会以php 执⾏。
g. 双扩展名解析绕过攻击(2)如果在Apache 的conf ⾥有这样⼀⾏配置AddHandler php5-script .php这时只要⽂件名⾥包含.php,即使⽂件名是test2.php.jpg 也会以php 来执⾏。
图片上传原理
图片上传原理图片上传是指将本地的图片文件上传至网络服务器,以便在网页或者应用程序中进行展示或者分享。
图片上传原理涉及到客户端和服务器端的交互过程,下面将详细介绍图片上传的原理及相关知识。
首先,图片上传的原理是基于客户端和服务器端的通信机制。
用户在客户端选择要上传的图片文件后,通过浏览器或者应用程序将图片文件发送至服务器端。
在这个过程中,涉及到了HTTP协议和表单提交的相关知识。
其次,客户端通过浏览器或者应用程序选择图片文件后,将图片文件通过HTTP协议发送至服务器端。
HTTP协议是一种用于传输超文本数据的应用层协议,它是建立在TCP/IP协议之上的。
通过HTTP协议,客户端可以向服务器发送请求,并获取服务器的响应。
然后,客户端将图片文件通过表单提交的方式发送至服务器端。
表单是HTML中的一种交互元素,它可以包含各种类型的输入控件,比如文本框、下拉框、文件上传等。
当用户在表单中选择了要上传的图片文件后,通过表单提交的方式将图片文件发送至服务器端。
接着,服务器端接收到客户端发送的图片文件后,会对图片文件进行相应的处理。
服务器端可以对图片文件进行格式转换、大小压缩、水印添加等操作,以满足不同的需求。
在这个过程中,涉及到了服务器端的存储和处理技术。
最后,服务器端将处理后的图片文件保存在指定的位置,并返回一个访问路径给客户端。
客户端可以通过访问路径来获取服务器端保存的图片文件,并在网页或者应用程序中进行展示或者分享。
在这个过程中,涉及到了图片文件的访问和展示技术。
总结来说,图片上传的原理涉及到客户端和服务器端的通信机制,通过HTTP协议和表单提交的方式将图片文件发送至服务器端,然后服务器端对图片文件进行处理并保存,并返回一个访问路径给客户端。
这样,客户端就可以通过访问路径来获取服务器端保存的图片文件,实现在网页或者应用程序中的展示或者分享。
这就是图片上传的原理及相关知识。
海康威视DS-K1T系列配置图片抓拍上传指南
DS-K1T105/200/300 配置图片抓拍上传操作手册目录一、操作流程(配置流程) (1)二、操作步骤(配置步骤) (1)三、适用型号 (7)四、变更记录 (7)五、关于海康威视 (1)一、操作流程(配置流程)1)安装存储服务器2)添加存储服务器3)联动抓拍配置4)远程配置5)联动配置6)效果验证二、操作步骤(配置步骤)1.第一步:安装存储服务器安装4200 时,勾选存储服务器进行安装。
如下图所示。
2.第二步:添加存储服务器a)进入4200客户端中的视频系统,选择设备管理,在服务器中添加设备类型;b)添加存储服务器c)将存储服务器添加到设备管理中;默认用户名:admin,密码:12345;d)选择远程配置,进入存储中常用菜单;选择你要存储的位置(硬盘号1、2、3分别代表C、D、E盘),格式化;存储服务器重启后,重新进入,选择配额,在不录像的情况下,可以将录像配额改为0%,抓图配额改为100%;(根据自己的需求选择)3.第三步:联动抓拍配置a)进入门禁系统,正常配置门禁系统;之后进入门禁控制器修改界面,选择联动抓拍设置;b)选择每次抓拍的次数和间隔;4.第四步:远程配置a)进入远程配置,选择其他;配置门禁参数时,可以根据自己的需求选择对象;b)在人脸检测功能选择使能并点击应用;5.第五步:联动配置。
进入联动配置界面,选择事件卡号联动,添加联动信息,根据自己的需求选择所需的联动事件或联动卡号、关联抓拍、保存并下载配置;6.第六步:效果验证在一体机上刷卡或刷指纹,屏幕上会出现实时的图像(注意:摄像头一定要对准人脸);在时间查询中查看抓拍图片;三、适用型号五、关于海康威视海康威视是以视频为核心的物联网解决方案提供商,面向全球提供综合安防、智慧业务与大数据服务。
海康威视全球员工超26000人(截止2017年底),其中研发人员和技术服务人员超13000人,研发投入占企业销售额的7-8%,绝对数额占据业内前茅。
springboot实现图片上传和下载功能
springboot实现图⽚上传和下载功能这篇博客简单介绍下spring boot下图⽚上传和下载,已经遇到的问题。
⾸先需要创建⼀个spring boot项⽬。
1、核⼼的controller代码package com.qwrt.station.websocket.controller;import com.alibaba.fastjson.JSONObject;import mon.util.JsonUtil;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import java.io.*;/*** Created by jack on 2017/10/30.*/@RestController@RequestMapping("v1/uploadDownload")public class UploadDownloadController {private static final Logger logger = LoggerFactory.getLogger(UploadDownloadController.class);@Value("${uploadDir}")private String uploadDir;@RequestMapping(value = "/uploadImage", method = RequestMethod.POST)public JSONObject uploadImage(@RequestParam(value = "file") MultipartFile file) throws RuntimeException {if (file.isEmpty()) {return JsonUtil.getFailJsonObject("⽂件不能为空");}// 获取⽂件名String fileName = file.getOriginalFilename();("上传的⽂件名为:" + fileName);// 获取⽂件的后缀名String suffixName = fileName.substring(stIndexOf("."));("上传的后缀名为:" + suffixName);// ⽂件上传后的路径String filePath = uploadDir;// 解决中⽂问题,liunx下中⽂路径,图⽚显⽰问题// fileName = UUID.randomUUID() + suffixName;File dest = new File(filePath + fileName);// 检测是否存在⽬录if (!dest.getParentFile().exists()) {dest.getParentFile().mkdirs();}try {file.transferTo(dest);("上传成功后的⽂件路径未:" + filePath + fileName);return JsonUtil.getSuccessJsonObject(fileName);} catch (IllegalStateException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return JsonUtil.getFailJsonObject("⽂件上传失败");}//⽂件下载相关代码@RequestMapping(value = "/downloadImage",method = RequestMethod.GET)public String downloadImage(String imageName,HttpServletRequest request, HttpServletResponse response) {//String fileName = "123.JPG";logger.debug("the imageName is : "+imageName);String fileUrl = uploadDir+imageName;if (fileUrl != null) {//当前是从该⼯程的WEB-INF//File//下获取⽂件(该⽬录可以在下⾯⼀⾏代码配置)然后下载到C:\\users\\downloads即本机的默认下载的⽬录 /* String realPath = request.getServletContext().getRealPath("//WEB-INF//");*//*File file = new File(realPath, fileName);*/File file = new File(fileUrl);if (file.exists()) {response.setContentType("application/force-download");// 设置强制下载不打开response.addHeader("Content-Disposition","attachment;fileName=" + imageName);// 设置⽂件名byte[] buffer = new byte[1024];FileInputStream fis = null;BufferedInputStream bis = null;try {fis = new FileInputStream(file);bis = new BufferedInputStream(fis);OutputStream os = response.getOutputStream();int i = bis.read(buffer);while (i != -1) {os.write(buffer, 0, i);i = bis.read(buffer);}System.out.println("success");} catch (Exception e) {e.printStackTrace();} finally {if (bis != null) {try {bis.close();} catch (IOException e) {e.printStackTrace();}}if (fis != null) {try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}}return null;}}上⾯的代码有两个⽅法,上⾯的⽅法是图⽚上传的⽅法,下⾯的⽅法是图⽚下载的⽅法。
ASP批量上传图片
文件1.<script type="text/javascript">function checkRowsLimit(){var rowLimit = 20;var len=document.getElementById('filearea').rows.length;if(len==rowLimit){alert('一次只能添加20个图片!');return false;}else{return true;}}function addNewRow(){var obj=document.getElementById('filearea');var row=obj.insertRow(-1);var c0=row.insertCell(0);c0.innerHTML='<input type=hidden size=3 maxlength=8 name=question value="" /> ';c0.align='right';var c1=row.insertCell(1);c1.innerHTML=+obj.getElementsByTagName("u").length+1+'、<u><input type=file size=50 maxlength=50 name="pictures'+obj.getElementsByTagName("u").length+1+'"style="margin-left:1px;" /></u>';c1.align='left';var c2=row.insertCell(2);c2.innerHTML='<a href="javascript:void(0)" onclick="removeRow(this)">[删除]</a>';changeFlag = true;try{comm_set_page_height();}catch (e){}}function removeRow(fontobj){if(confirm("确定取消该项吗?")){var obj=document.getElementById('filearea');var n=fontobj.parentNode.parentNode.rowIndex;obj.deleteRow(n);}}</script><body><div align="center"><font size=4>ASP图片批量上传<br><br></font><font size=2 color=red>注:上传格式为.jpg,png,gif,bmp,jpeg</font></div><form action="poto_up.asp" method="post" enctype="multipart/form-data"><table width="561" border="0" id="filearea" align="center"><tr><td width="27" align=right><input type="hidden" maxLength=8 size=3 name=question /></td><td width="469" align=left>1、<u><input type="file" style="MARGIN-LEFT: 1px" maxLength=50 size=50 name="pictures1" /></u></td><td width="54"><a href="#" onClick="if(checkRowsLimit()){addNewRow();changeFlag=true}" title="点击后在上面添加的输入框">[添加]</a></td> </tr></table><input type="hidden" name="act" value="uploadfile"><div align="center"><br><input type="submit" name="upload" value="上传" /></div></body><form>文件二<%'====================================='此代码功能强大,经改动后可以用于各种图片上传及产品图片上传'技术支持:QQ 757187785'=====================================%><!--#include file="upload_files.inc"--><%function getex(filename) '取图片后缀名getex = right(filename,(len(filename)-InStr(filename,".")))End Functiondim upload,file,formName,formPath,fname,getfilenameset upload=new upload_5xsoftformPath=upload.form("filepath") '目前是当前路径可以改成 "./123/"for each formName in upload.objFileset file=upload.file(formName)'上传图片格式if LCase(getex(file.filename))="jpg" or LCase(getex(file.filename))="png" orLCase(getex(file.filename))="gif" or LCase(getex(file.filename))="bmp" orLCase(getex(file.filename))="jpeg" thenif file.FileSize<=0 thencall ShowError("无效文件!")end ifif file.FileSize>0 thenfname = now()fname = replace(fname,"-","")fname = replace(fname," ","")fname = replace(fname,":","")fname = replace(fname,"PM","")fname = replace(fname,"AM","")fname = replace(fname,"上午","")fname = replace(fname,"下午","")fname = fname&Int((right(fname,4) - 0 + 1) * Rnd + 0)file.SaveAs Server.mappath(formPath&fname&"."&getex(file.filename)) '保存end ifset file=nothingi=i+1elseresponse.Write("<script language='javascript'>alert('"&file.filename&"不是图片格式不能上传')</script>")end ifnextresponse.Write("<script language='javascript'>alert('上传成功');history.go(-1);</script>")%>文件三<SCRIPT RUNAT=SERVER LANGUAGE=VBSCRIPT>dim Data_5xsoftClass upload_5xsoftdim objForm,objFile,VersionPublic function Form(strForm)strForm=lcase(strForm)if not objForm.exists(strForm) thenForm=""elseForm=objForm(strForm)end ifend functionPublic function File(strFile)strFile=lcase(strFile)if not objFile.exists(strFile) thenset File=new FileInfoelseset File=objFile(strFile)end ifend functionPrivate Sub Class_Initializedim RequestData,sStart,vbCrlf,sInfo,iInfoStart,iInfoEnd,tStream,iStart,theFile dim iFileSize,sFilePath,sFileType,sFormValue,sFileNamedim iFindStart,iFindEnddim iFormStart,iFormEnd,sFormNameVersion="化境HTTP上传程序Version 2.1"set objForm=Server.CreateObject("Scripting.Dictionary")set objFile=Server.CreateObject("Scripting.Dictionary")if Request.TotalBytes<1 then Exit Subset tStream = Server.CreateObject("adodb.stream")set Data_5xsoft = Server.CreateObject("adodb.stream")Data_5xsoft.Type = 1Data_5xsoft.Mode =3Data_5xsoft.OpenData_5xsoft.Write Request.BinaryRead(Request.TotalBytes)Data_5xsoft.Position=0RequestData =Data_5xsoft.ReadiFormStart = 1iFormEnd = LenB(RequestData)vbCrlf = chrB(13) & chrB(10)sStart = MidB(RequestData,1, InStrB(iFormStart,RequestData,vbCrlf)-1) iStart = LenB (sStart)iFormStart=iFormStart+iStart+1while (iFormStart + 10) < iFormEndiInfoEnd = InStrB(iFormStart,RequestData,vbCrlf & vbCrlf)+3 tStream.Type = 1tStream.Mode =3tStream.OpenData_5xsoft.Position = iFormStartData_5xsoft.CopyTo tStream,iInfoEnd-iFormStarttStream.Position = 0tStream.Type = 2tStream.Charset ="gb2312"sInfo = tStream.ReadTexttStream.Close'取得表单项目名称iFormStart = InStrB(iInfoEnd,RequestData,sStart)iFindStart = InStr(22,sInfo,"name=""",1)+6iFindEnd = InStr(iFindStart,sInfo,"""",1)sFormName = lcase(Mid (sinfo,iFindStart,iFindEnd-iFindStart))'如果是文件if InStr (45,sInfo,"filename=""",1) > 0 thenset theFile=new FileInfo'取得文件名iFindStart = InStr(iFindEnd,sInfo,"filename=""",1)+10iFindEnd = InStr(iFindStart,sInfo,"""",1)sFileName = Mid (sinfo,iFindStart,iFindEnd-iFindStart)theFile.FileName=getFileName(sFileName)theFile.FilePath=getFilePath(sFileName)theFile.FileExt=GetFileExt(sFileName)'取得文件类型iFindStart = InStr(iFindEnd,sInfo,"Content-Type: ",1)+14iFindEnd = InStr(iFindStart,sInfo,vbCr)theFile.FileType =Mid (sinfo,iFindStart,iFindEnd-iFindStart)theFile.FileStart =iInfoEndtheFile.FileSize = iFormStart -iInfoEnd -3theFile.FormName=sFormNameif not objFile.Exists(sFormName) thenobjFile.add sFormName,theFileend ifelse'如果是表单项目tStream.Type =1tStream.Mode =3tStream.OpenData_5xsoft.Position = iInfoEndData_5xsoft.CopyTo tStream,iFormStart-iInfoEnd-3tStream.Position = 0tStream.Type = 2tStream.Charset ="gb2312"sFormValue = tStream.ReadTexttStream.Closeif objForm.Exists(sFormName) thenobjForm(sFormName)=objForm(sFormName)&", "&sFormValueelseobjForm.Add sFormName,sFormValueend ifend ifiFormStart=iFormStart+iStart+1wendRequestData=""set tStream =nothingEnd SubPrivate Sub Class_Terminateif Request.TotalBytes>0 thenobjForm.RemoveAllobjFile.RemoveAllset objForm=nothingset objFile=nothingData_5xsoft.Closeset Data_5xsoft =nothingend ifEnd SubPrivate function GetFilePath(FullPath)If FullPath <> "" ThenGetFilePath = left(FullPath,InStrRev(FullPath, "\"))ElseGetFilePath = ""End IfEnd functionPrivate function GetFileExt(FullPath)If FullPath <> "" ThenGetFileExt = mid(FullPath,InStrRev(FullPath, ".")+1)ElseGetFileExt = ""End IfEnd functionPrivate function GetFileName(FullPath)If FullPath <> "" ThenGetFileName = mid(FullPath,InStrRev(FullPath, "\")+1)ElseGetFileName = ""End IfEnd functionEnd ClassClass FileInfodim FormName,FileName,FilePath,FileSize,FileExt,FileType,FileStartPrivate Sub Class_InitializeFileName = ""FilePath = ""FileSize = 0FileStart= 0FormName = ""FileType = ""FileExt = ""End SubPublic function SaveAs(FullPath)dim dr,ErrorChar,iSaveAs=trueif trim(fullpath)="" or FileStart=0 or FileName="" or right(fullpath,1)="/" then exit function set dr=CreateObject("Adodb.Stream")dr.Mode=3dr.Type=1dr.OpenData_5xsoft.position=FileStartData_5xsoft.copyto dr,FileSizedr.SaveToFile FullPath,2dr.Closeset dr=nothingSaveAs=false end function End Class</SCRIPT>。
