上传图片的功能想必并不是什么费劲的事儿了,但大多数童鞋都是在本机(也是tomcat/jboss服务器)实现上传,且没有考虑图片重命名(中文乱码)的问题。
这篇博客的上传图片是基于真实的项目,且采用了nginx图片服务器,Windows和Linux服务器均可使用。
Jsp页面:需要一个file控件,一个hidden控件(用于建立自定义分类文件夹)和一个button(上传按钮)。
<div> <p class="ui-tips">上传头像会自动生成头像缩略图片,您也可以拖动大图的裁剪区域,调整缩图内容。</p> <p class="ui-tips">支持JPG、GIF、PNG等图片格式 推荐尺寸:180*180像素</p> <input type="file" id="fileCoursePoster" style="display: none;" name="fileCoursePoster"> <span id="errorCoursePoster" style="color: red; display: none;">请上传图片!</span> <input type="button" value="上传头像" class="btn btn-sm btn-normal"> <input type="hidden" id="imageType" name="imageType"> </div>
Js:需要引入ajaxfileupload这个js。
function upLoad(){ document.getElementById("imageType").value = "headPicture"; //图片分类,自定义类型,是海报还是个人头像 $("#fileCoursePoster").click(); } function uploadCoursePoster() { var imageType = document.getElementById("imageType").value; var studentId=$("#studentId").val(); $.ajaxFileUpload({ url : "/itoo-jrkj-student-web/media/uploadImages", secureuri : false, data : { "studentId" : studentId, "imageType" : imageType }, fileElementId : "fileCoursePoster",// 文件选择框的id属性 dataType : 'json', success : function(data) { $("#imgCoursePoster").attr( "src", "http://123.56.120.25:8888/apple/" + data); $('#headPic').val(data); alert("上传成功!"); }, error : function(XMLHttpRequest, textStatus, errorThrown) { alert("上传失败!"); } }); }
Controller:
// 上传个人头像--生成图片路径并将路径保存到数据库 @RequestMapping(value = "media/uploadImages", produces = "text/plain;charset=UTF-8") @ResponseBody public void uploadImages(HttpServletRequest request, HttpServletResponse response) throws IllegalStateException, IOException { // 上传到指定的文件夹中,imageType为文件夹的名字 String imageType = request.getParameter("imageType").toString(); //文件夹名,便于图片分类 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; String fileName = "";//图片的名字 Calendar date = Calendar.getInstance(); //以图片类别+日期规划图片文件夹层级 SimpleDateFormat format1 = new SimpleDateFormat("yyyy"); SimpleDateFormat format2 = new SimpleDateFormat("MM"); SimpleDateFormat format3 = new SimpleDateFormat("dd"); String year = format1.format(date.getTime()); String month = format2.format(date.getTime()); String day = format3.format(date.getTime()); // 上传的图片存储的路径,格式如下: //------------------要先将文件传入本机Jboss下的jboss3.1/bin文件夹中,因为File获得图片的绝对路径是自己定位到这儿了 String uploadServicePath = ""; String filePath=""; for (Iterator it = multipartRequest.getFileNames(); it.hasNext();) { String key = (String) it.next(); MultipartFile mulfile = multipartRequest.getFile(key); fileName = mulfile.getOriginalFilename(); //获取上传图片的文件名,以便得到其在jboss中的路径 //获取存在服务器下的图片的绝对路径 File getFilePath=new File(fileName);//要根据图片名字获取路径 filePath=getFilePath.getAbsolutePath();//获取Jboss服务器bin路径 File file = new File(filePath); mulfile.transferTo(file);//保存 } File imagefile = new File(filePath); //TODO:创建ftp客户端 --读配置文件 FTPClient ftpClient = new FTPClient(); ftpClient.setControlEncoding("GBK"); String hostname = "xxx.xxx.xxx.xxx"; //FTP服务器主机ip int port = 21;//FTP服务器端口,默认就是21 String username = "apple"; //FTP服务器用户名(可以有多个) String password = "apple123";//FTP服务器密码 try { //链接ftp服务器 ftpClient.connect(hostname, port); //登录ftp ftpClient.login(username, password); int reply = ftpClient.getReplyCode(); //ftp服务状态码 System.out.println("reply返回码是:"+reply); //如果reply返回230就算成功了,如果返回530密码用户名错误或当前用户无权限。 if (!FTPReply.isPositiveCompletion(reply)) { ftpClient.disconnect(); return ; } ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); // 保存图片的相对路径到阿里云服务器 fileName=UUID.randomUUID().toString()+".jpg";//自定义图片名,也能防止汉字的干扰 uploadServicePath ="uploadImage/" + imageType + "/" + year + "/" + month+day+"/"+fileName; //上传到服务器的路径 //在nginx上创建文件夹,一次只能创建一级,所以建多级要分多次 ftpClient.makeDirectory("uploadImage");//什么的都不写的情况下,默认在root目录下创建文件夹,此处在nginx/apple/uploadImage下,apple文件夹是用户名,创建用户时自动建好的 ftpClient.makeDirectory("uploadImage/"+imageType); ftpClient.makeDirectory("uploadImage/"+imageType+ "/" + year); ftpClient.makeDirectory("uploadImage/"+imageType+ "/" + year +"/"+month+day); InputStream input = new FileInputStream(imagefile); ftpClient.storeFile(uploadServicePath, input);//文件你若是不指定就会上传到root目录下 input.close(); ftpClient.logout(); } catch (SocketException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ioe) { ioe.printStackTrace(); } } } // 根据id更新个人信息 Student student = new Student(); String studentId = request.getParameter("studentId"); student = studentBean.findStudentById(studentId, dataBaseName); student.setDataBaseName(dataBaseName); student.setHeadPic(uploadServicePath); if (!studentBean.updateHeadPicture(student)) { uploadServicePath = "error"; } System.out.println("realPath-------------" + uploadServicePath); JacksonJsonUntil jacksonJsonUntil = new JacksonJsonUntil(); jacksonJsonUntil.beanToJson(response, uploadServicePath); } // 读取往期图片 @RequestMapping(value = "media/readImages", produces = "text/plain;charset=UTF-8") public void readImage(HttpServletRequest request, HttpServletResponse response) { // 或:从服务器中的相对位置读取图片 // String imagesPath // =request.getSession().getServletContext().getRealPath("/")+request.getParameter("imagesPath"); String imagesPath = request.getParameter("imagesPath"); System.out.println("imagesPath-------------------" + imagesPath); try { File file = new File(imagesPath); if (file.exists()) { DataOutputStream temps = new DataOutputStream( response.getOutputStream()); DataInputStream in = new DataInputStream(new FileInputStream( imagesPath)); byte[] b = new byte[2048]; while ((in.read(b)) != -1) { temps.write(b); temps.flush(); } in.close(); temps.close(); } } catch (Exception e) { e.printStackTrace(); } }有一个问题,就是上传过程中,Eclipse中常会出现net.connention.timeout;FireBug中出现“图像损坏”这两个异常,但并不影响使用。怀疑是我把所有图片都改为了JPG类型~ 还没测试到底是不是。
解决思路:在Controller里判断一下,截取原图片名字的类型,即“.xxx”或“.xxxx”,如果不属于jpg/jpeg/png/gif四种类型就不许上传,符合的将其重命名后再加上它本来的图片类型后缀。
以上就介绍了uploadFile+nginx实现上传图片(Windows/Linux均可用),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

“你的组织要求你更改PIN消息”将显示在登录屏幕上。当在使用基于组织的帐户设置的电脑上达到PIN过期限制时,就会发生这种情况,在该电脑上,他们可以控制个人设备。但是,如果您使用个人帐户设置了Windows,则理想情况下不应显示错误消息。虽然情况并非总是如此。大多数遇到错误的用户使用个人帐户报告。为什么我的组织要求我在Windows11上更改我的PIN?可能是您的帐户与组织相关联,您的主要方法应该是验证这一点。联系域管理员会有所帮助!此外,配置错误的本地策略设置或不正确的注册表项也可能导致错误。即

Windows11将清新优雅的设计带到了最前沿;现代界面允许您个性化和更改最精细的细节,例如窗口边框。在本指南中,我们将讨论分步说明,以帮助您在Windows操作系统中创建反映您的风格的环境。如何更改窗口边框设置?按+打开“设置”应用。WindowsI转到个性化,然后单击颜色设置。颜色更改窗口边框设置窗口11“宽度=”643“高度=”500“>找到在标题栏和窗口边框上显示强调色选项,然后切换它旁边的开关。若要在“开始”菜单和任务栏上显示主题色,请打开“在开始”菜单和任务栏上显示主题

默认情况下,Windows11上的标题栏颜色取决于您选择的深色/浅色主题。但是,您可以将其更改为所需的任何颜色。在本指南中,我们将讨论三种方法的分步说明,以更改它并个性化您的桌面体验,使其具有视觉吸引力。是否可以更改活动和非活动窗口的标题栏颜色?是的,您可以使用“设置”应用更改活动窗口的标题栏颜色,也可以使用注册表编辑器更改非活动窗口的标题栏颜色。若要了解这些步骤,请转到下一部分。如何在Windows11中更改标题栏的颜色?1.使用“设置”应用按+打开设置窗口。WindowsI前往“个性化”,然

您是否在Windows安装程序页面上看到“出现问题”以及“OOBELANGUAGE”语句?Windows的安装有时会因此类错误而停止。OOBE表示开箱即用的体验。正如错误提示所表示的那样,这是与OOBE语言选择相关的问题。没有什么可担心的,你可以通过OOBE屏幕本身的漂亮注册表编辑来解决这个问题。快速修复–1.单击OOBE应用底部的“重试”按钮。这将继续进行该过程,而不会再打嗝。2.使用电源按钮强制关闭系统。系统重新启动后,OOBE应继续。3.断开系统与互联网的连接。在脱机模式下完成OOBE的所

任务栏缩略图可能很有趣,但它们也可能分散注意力或烦人。考虑到您将鼠标悬停在该区域的频率,您可能无意中关闭了重要窗口几次。另一个缺点是它使用更多的系统资源,因此,如果您一直在寻找一种提高资源效率的方法,我们将向您展示如何禁用它。不过,如果您的硬件规格可以处理它并且您喜欢预览版,则可以启用它。如何在Windows11中启用任务栏缩略图预览?1.使用“设置”应用点击键并单击设置。Windows单击系统,然后选择关于。点击高级系统设置。导航到“高级”选项卡,然后选择“性能”下的“设置”。在“视觉效果”选

在Windows11上的显示缩放方面,我们都有不同的偏好。有些人喜欢大图标,有些人喜欢小图标。但是,我们都同意拥有正确的缩放比例很重要。字体缩放不良或图像过度缩放可能是工作时真正的生产力杀手,因此您需要知道如何对其进行自定义以充分利用系统功能。自定义缩放的优点:对于难以阅读屏幕上的文本的人来说,这是一个有用的功能。它可以帮助您一次在屏幕上查看更多内容。您可以创建仅适用于某些监视器和应用程序的自定义扩展配置文件。可以帮助提高低端硬件的性能。它使您可以更好地控制屏幕上的内容。如何在Windows11

屏幕亮度是使用现代计算设备不可或缺的一部分,尤其是当您长时间注视屏幕时。它可以帮助您减轻眼睛疲劳,提高易读性,并轻松有效地查看内容。但是,根据您的设置,有时很难管理亮度,尤其是在具有新UI更改的Windows11上。如果您在调整亮度时遇到问题,以下是在Windows11上管理亮度的所有方法。如何在Windows11上更改亮度[10种方式解释]单显示器用户可以使用以下方法在Windows11上调整亮度。这包括使用单个显示器的台式机系统以及笔记本电脑。让我们开始吧。方法1:使用操作中心操作中心是访问

在iOS17中,Apple为其移动操作系统引入了几项新的隐私和安全功能,其中之一是能够要求对Safari中的隐私浏览选项卡进行二次身份验证。以下是它的工作原理以及如何将其关闭。在运行iOS17或iPadOS17的iPhone或iPad上,如果您在Safari浏览器中打开了任何“无痕浏览”标签页,然后退出会话或App,Apple的浏览器现在需要面容ID/触控ID认证或密码才能再次访问它们。换句话说,如果有人在解锁您的iPhone或iPad时拿到了它,他们仍然无法在不知道您的密码的情况下查看您的隐私


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SublimeText3 Linux新版
SublimeText3 Linux最新版

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

WebStorm Mac版
好用的JavaScript开发工具

SublimeText3 英文版
推荐:为Win版本,支持代码提示!