تشترك هذه المقالة في حالة كاملة لتحميل الصور في Javaweb للرجوع إليها. المحتوى المحدد كما يلي
أفكار التنفيذ
• استخدم المكون الإضافي JCROP لتقسيم إحداثيات الصورة على هاتفك
• تمرير المعلمات التي تم جمعها إلى الخلفية ، واستخدم كائنات Java الرسومية لرسم الصور للاقتصاص
process تدفق المعالجة:
1. اضغط على الصور التي تم تحميلها بشكل متناسب وتحميلها على خادم الملفات ، وحفظ الصور المضغوطة في دليل مؤقت محلي.
2. صدى الصورة المضغوطة إلى الصفحة ، واستخدم JCROP للاقتصاص ، وقص الإحداثيات على الهاتف (X ، Y ، العرض ، الارتفاع)
■@paramx تهدف نقطة البدء
■@param y تنسق نقطة بدء شريحة الهدف y
■@بارام عرض عرض الشريحة عرض شريحة ■@بارام ارتفاع شريحة الهدف ارتفاع
3. معالجة الكواليس من المحاصيل والتحميل
صفحة JSP
<٪@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core" ٪> <٪@ page contentType = "text/html ؛ charset = utf-8" language = "java" ٪> <! content = "text/html ؛ charset = utf-8"/> <title> تحميل مستخدم Avatar </title> <link href = "$ {pagecontext.request.contextpath} /js/cutimg/css/master.css href = "$ {pagecontext.request.contextpath} /js/cutimg/css/upload.css /> <link href = "$ {pagecontext.request.contextpath} /js/cutimg/css/jquery.jcrop.css" rel = "stylesheet"/> </head> <body> <body> <div> <div> <viv> <div id = "pic2"> <div id = "uploadfile"> <div style = "margin-left: 75px ؛"> <a href = "javaScript :؛" id = "uptext" style = "color: red ؛ لا شيء ؛ "> <a href =" javaScript :؛ " style = "color: red"> repload </a> </p> <input type = "hidden" name = "picval" id = "picval" /> <input type = "Hidden" id = "fileId" size = "100" /> <input type = "hidden" name = "fileurl" id = "fileurl" size = "100" /> <input type = "hidden" name = "imgheight" id = "imgheight" size = "100" /> id = "feariee_1" src = "$ {pagecontext.request.contextpath}/emages/4-3.jpg"/> </div> <p> 400 x 300 بكسل </p> <٪-<div> <img id = "preview_2" src = $ {pagecontex </viv> <p> 80 × 80 بكسل </p>-٪> <p> اسحب أو التكبير لإنشاء صورة شخصية مرضية </p> </viv> <٪-<div id = "img_description"> <textarea </viv>-٪> <div> <font id = "upalert"> </font> </div> id = "x" size = "5" /> <input type = "hidden" name = "w" id = "w" size = "5" /> <input type = "Hidden" id = "saveImage"> <a href = "javaScript :؛" style = "color: red"> حفظ الصورة الرمزية </a> </div> </viv> </form> </viv> </body> <script type = "text/javaScript" src = "$ {pagecontext.request.contextpath} /js/jquery.form.js src = "$ {pagecontext.request.contextpath} /js/jquery.validate.min.js"> </script> <script type = "text/javaScript" src = "$ {pagecontext.request.contextpath} /js src = "$ {pagecontext.request.contextpath} /js/check.js"> </script> <script src = "$ {pagecontext.request.contextpath} /js/cutimg/js/jquery-1.7.1.min.JS src = "$ {pagecontext.request.contextpath} /js/cutimg/js/jquery.form.js" type = "text/javaScript"> </cript> <script src = "$ {pagecontext type = "text/javaScript"> </script> <script src = "$ {pagecontext.request.contextpath} /js/cutimg/js/jquery-custom-file-inpt.js src = "$ {pagecontext.request.contextpath} /js/cutimg/js/jquery.jcrop.js" type = "text/javaScript"> </script> <النص src = "$ {pagecontext.request.contextpath} /js/cutimg/js/jquery.rollbar.min.js" type = "text/javaScript"> </script> <script src = "$ {pagecontext.request.contextpath} /js/cutimg/js/jquery.rollbar.min.js" type = "text/javaScript"> </script> <script src = "$ {pagecontext.request.contextpath} /js/cutimg/js/upload.ui.photos.js" type = "text/javascript src = "$ {pagecontext.request.contextpath} /js/dialog/dialog.js؟lib=false"> </script> <script type = "text/javaScript"> photos.jcorpwidth = 400 ؛ "80"] ؛ // حجم الصورة "عرض" عرض "عرض" ، يحدد عرض الصور المختلفة من كبيرة إلى صغيرة إلى عدد الصور // الصور. photos.upload_filetextid = "uptext" ؛ // تحميل زر المعرف الزر - تحميل الصور. "OriginalImg" ؛ // photo photo photo photos.upload_reloadid = "up_reload" ؛ // reupload component id photos.upload_picvalueid = "picval" "fileurl" ؛ /// قم بتحميل صور url الصورة. photos.upload_originvalueid = "OrigpicVal" ؛ // معرف محتوى الصورة الأصلي عندما تدخل الصفحات الأخرى photos.upload_rollbarid = "pic2" ؛ // custom scrollbar معرف الصور. صور ذات أحجام مختلفة ، تنسيق المعرف للصور الصغيرة المتعددة "بادئة" + رقم (بدءًا من 1) ، مثال: id = "photos_preview1" ... photos.parentfileimgid = "imgurl "w" ؛ // w photos.hid = "h" ؛ // h photos.uptext_format = "آسف ، فقط تنسيقات jpg و png و bmp مدعومة للوقت" ؛ photos.url_check = "/eventprise/filescheck" ؛ // عنوان الصور. حفظ </script> </html>خلفية كود جافا
أداة تحميل الصور
package com.shengya.service.utils ؛ استيراد com.shengya.service.imgcontants ؛ import org.apache.commons.fileupload.disk.diskfileitem ؛ import org.springframework.web.multipart.multipartfile ؛ استيراد org.springframework.web.multipart.commons.CommonsMultipartfile ؛ import Sun.Misc.base64encoder ؛ import javax.crypto.mac ؛ import javax.crypto.secretke javax.imageio.imagereadparam ؛ استيراد java.awt. java.net.urlencoder ؛ استيراد java.util.arraylist ؛/** * Author Darcy * تم إنشاؤه بواسطة المسؤول في 2016/6/17. */فئة عامة TOPLOADUTILS {// public Final Static String Radiourl = "http://211.102.216.237:8011/fileserver/webapi/attachments/bio؟" ؛ السلسلة الثابتة النهائية العامة radiourl = "http://192.168.1.15:8088/fileserver/webapi/attachments/bio؟" ؛ url url static static النهائي العام = imgContants.img_upload + "/file/exploadImage؟" ؛ السلسلة الثابتة العامة fileurl = imgContants.img_upload + "/file/exploadfile؟" ؛ السلسلة الثابتة النهائية العامة Vediourl = imgContants.file_upload + "/file/uploadfile؟" ؛ prical static string string cropurl = imgcontantants.img_upload + "/file/cropimage؟" ؛ بايت ثابت خاص [] readasbytearr (inputStream is) {bytearrayoutputstream baos = new bytearrayoutputstream () ؛ حاول {byte [] bytes = new byte [1024] ؛ طول int = 0 ؛ بينما ((طول = IS.Read (bytes))! = -1) {baos.write (بايت ، 0 ، طول) ؛ } return baos.tobytearray () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {baos.close () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ } / ** * تحميل صورة * * param file * / سلسلة ثابتة عامة إرسال (ملف ملف) يلقي UnsupportedEncodingException {String fileName = urlencoder.encode (file.getName () ، "UTF-8") ؛ filemize long = file.length () ؛ منطقية isresuffix = صواب ؛ ارتفاع int = 0 ؛ عرض int = 500 ؛ Mark string = "t" ؛ وضع السلسلة = "W" ؛ url url = sign (url) + "& channelno = muying_android" + "& filename =" + filename + "& filesize =" + filedize + "& isResuffix =" + isResuffix + "& height =" + height + " System.out.println ("url:" + url) ؛ httpurlConnection conn = null ؛ OutputStream Outstream = NULL ؛ BufferedInputStream Bin = NULL ؛ حاول {bin = جديد bufferedInputStream (FileInputStream جديد (ملف)) ؛ conn = (httpurlConnection) url new url (url) .OpenConnection () ؛ Conn.SetConnectTimeout (15000) ؛ Conn.SetRequestMethod ("post") ؛ conn.setDooutput (صواب) ؛ // conn.setFixedLengthStreamingMode (file.length ()) ؛ Conn.SetRequestProperty ("نوع المحتوى" ، "التطبيق/X-WWW-Form-urlencoded") ؛ Conn.SetRequestProperty ("طول المحتوى" ، file.length () + "") ؛ // conn.setRequestProperty ("Range" ، "bytes ="+"") ؛ // قم بتعيين ترميز حرف HttPurlConnection Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ OutStream = conn.getOutputStream () ؛ Byte [] buf = new byte [1024] ؛ int len = 0 ؛ int lencount = 0 ؛ بينما ((len = bin.read (buf))! = -1) {OutStream.write (buf ، 0 ، len) ؛ // ok lencount = lencount + len ؛ } overstream.flush () ؛ int responseCode = conn.getResPonsecode () ؛ if (responseCode == 200) {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ } آخر {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (overstream! = null) {OutStream.Close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ } / ** * تحميل صورة * * param file * / سلسلة ثابتة pridtwebimage (ملف multipartfile) يلقي UnsupportedEncodingException {String fileName = urlencoder.encode (file.getoriginalfilename () ، "UTF-8") ؛ ملفات طويلة = file.getSize () ؛ منطقية isresuffix = صواب ؛ ارتفاع int = 0 ؛ عرض int = 500 ؛ Mark string = "t" ؛ وضع السلسلة = "W" ؛ url url = sign (url) + "& channelno = muying_android" + "& filename =" + filename + "& filesize =" + filedize + "& isResuffix =" + isResuffix + "& height =" + height + " System.out.println ("url:" + url) ؛ httpurlConnection conn = null ؛ OutputStream Outstream = NULL ؛ BufferedInputStream Bin = NULL ؛ حاول {bin = جديد bufferedInputStream (file.getInputStream ()) ؛ conn = (httpurlConnection) url new url (url) .OpenConnection () ؛ Conn.SetConnectTimeout (15000) ؛ Conn.SetRequestMethod ("post") ؛ conn.setDooutput (صواب) ؛ // conn.setFixedLengthStreamingMode (file.length ()) ؛ Conn.SetRequestProperty ("نوع المحتوى" ، "التطبيق/X-WWW-Form-urlencoded") ؛ Conn.SetRequestProperty ("طول المحتوى" ، file.getSize () + "") ؛ // conn.setRequestProperty ("Range" ، "bytes ="+"") ؛ // قم بتعيين ترميز حرف HttPurlConnection Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ OutStream = conn.getOutputStream () ؛ Byte [] buf = new byte [1024] ؛ int len = 0 ؛ int lencount = 0 ؛ بينما ((len = bin.read (buf))! = -1) {OutStream.write (buf ، 0 ، len) ؛ // ok lencount = lencount + len ؛ } overstream.flush () ؛ int responseCode = conn.getResPonsecode () ؛ if (responseCode == 200) {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ } آخر {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (overstream! = null) {OutStream.Close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ } / ** * تحميل الفيديو * * param file * / سلسلة ثابتة عامة إرسال (ملف multipartfile) يلقي استثناء {String url = signradio (radiourl) ؛ System.out.println ("url:" + url) ؛ httpurlConnection conn = null ؛ OutputStream Outstream = NULL ؛ BufferedInputStream Bin = NULL ؛ حاول {bin = جديد bufferedInputStream (file.getInputStream ()) ؛ conn = (httpurlConnection) url new url (url) .OpenConnection () ؛ Conn.SetConnectTimeout (15000) ؛ Conn.SetRequestMethod ("post") ؛ conn.setDooutput (صواب) ؛ Conn.SetRequestProperty ("نوع المحتوى" ، "التطبيق/X-WWW-Form-urlencoded") ؛ Conn.SetRequestProperty ("طول المحتوى" ، file.getSize () + "") ؛ Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ OutStream = conn.getOutputStream () ؛ Byte [] buf = new byte [1024] ؛ int len = 0 ؛ int lencount = 0 ؛ بينما ((len = bin.read (buf))! = -1) {OutStream.write (buf ، 0 ، len) ؛ // ok lencount = lencount + len ؛ } overstream.flush () ؛ int responseCode = conn.getResPonsecode () ؛ if (responseCode == 200) {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ } آخر {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (overstream! = null) {OutStream.Close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ } /** * تحميل لقطة السيرة الذاتية * * param filename * param content * regurn * throws UnsupportedEncodingException * /سلسلة ثابتة عامة إرسال (اسم ملف السلسلة ، محتوى السلسلة). filename = urlencoder.encode (اسم الملف ، "UTF-8") ؛ byte [] contentBytes = content.getBytes () ؛ ملفات طويلة = contentBytes.Length ؛ منطقية isresuffix = صواب ؛ ارتفاع int = 0 ؛ عرض int = 500 ؛ Mark string = "t" ؛ وضع السلسلة = "W" ؛ url url = sign (fileurl) + "& channelno = muying_android" + "& filename =" + filename + "& filedize =" + filedize + "& isResuffix =" + iSresuffix + "& height =" + height + " System.out.println ("url:" + url) ؛ httpurlConnection conn = null ؛ OutputStream Outstream = NULL ؛ BufferedInputStream Bin = NULL ؛ حاول {conn = (httpurlConnection) عنوان URL الجديد (url) .OpenConnection () ؛ Conn.SetConnectTimeout (15000) ؛ Conn.SetRequestMethod ("post") ؛ conn.setDooutput (صواب) ؛ // conn.setFixedLengthStreamingMode (file.length ()) ؛ Conn.SetRequestProperty ("نوع المحتوى" ، "التطبيق/X-WWW-Form-urlencoded") ؛ Conn.SetRequestProperty ("طول المحتوى" ، content.length () + "") ؛ // conn.setRequestProperty ("Range" ، "bytes ="+"") ؛ // قم بتعيين ترميز حرف HttPurlConnection Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ OutStream = conn.getOutputStream () ؛ Outstream.write (contentBytes ، 0 ، contentBytes.length) ؛ // OK Outstream.flush () ؛ int responseCode = conn.getResPonsecode () ؛ if (responseCode == 200) {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ } آخر {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (overstream! = null) {OutStream.Close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ } / *** مرفق التحميل** regurn json string* throws UnsupportedEncodingException* / سلسلة ثابتة عامة submitfile (ملف multipartfile) يلقي UnduportedEncodingException {String filename = urlencoder.encode (file.getoriginialfilename () ، "UTF-8") ؛ ملفات طويلة = file.getSize () ؛ منطقية isresuffix = صواب ؛ ارتفاع int = 0 ؛ عرض int = 500 ؛ Mark string = "t" ؛ وضع السلسلة = "W" ؛ url url = sign (fileurl) + "& channelno = muying_android" + "& filename =" + filename + "& filedize =" + filedize + "& isResuffix =" + iSresuffix + "& height =" + height + " System.out.println ("url:" + url) ؛ httpurlConnection conn = null ؛ OutputStream Outstream = NULL ؛ BufferedInputStream Bin = NULL ؛ حاول {bin = جديد bufferedInputStream (file.getInputStream ()) ؛ conn = (httpurlConnection) url new url (url) .OpenConnection () ؛ Conn.SetConnectTimeout (15000) ؛ Conn.SetRequestMethod ("post") ؛ conn.setDooutput (صواب) ؛ // conn.setFixedLengthStreamingMode (file.length ()) ؛ Conn.SetRequestProperty ("نوع المحتوى" ، "التطبيق/X-WWW-Form-urlencoded") ؛ Conn.SetRequestProperty ("طول المحتوى" ، file.getSize () + "") ؛ // conn.setRequestProperty ("Range" ، "bytes ="+"") ؛ // قم بتعيين ترميز حرف HttPurlConnection Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ OutStream = conn.getOutputStream () ؛ Byte [] buf = new byte [1024] ؛ int len = 0 ؛ int lencount = 0 ؛ بينما ((len = bin.read (buf))! = -1) {OutStream.write (buf ، 0 ، len) ؛ // ok lencount = lencount + len ؛ } int responseCode = conn.getResponsecode () ؛ if (responseCode == 200) {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ } آخر {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (overstream! = null) {OutStream.Close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ } علامة سلسلة ثابتة خاصة (سلسلة baseurl) ترمي UnsupportedEncodingException {long currency = System.CurrentTimeMillis () ؛ الطابع الزمني الطويل = العملة / 1000 ؛ String Data = "ActionName = UploadImage" + "& SecretKey = 4B19F08DBF0ADB82CE9CC7C207EC1DC9" + "& timestamp =" + timestamp ؛ توقيع السلسلة = HMAC_SHA1 ("4B19F08DBF0ADB82CE9CC7C207EC1DC9" ، urlencoder.encode (البيانات ، "UTF-8")) ؛ signature = signature.replace ("٪ 3D" ، "٪ 3D") ؛ signature = signature.replace ("٪ 3a" ، "٪ 3a") ؛ signature = signature.replace ("٪ 2f" ، "٪ 2F") ؛ إرجاع baseurl + data + "& signature =" + signature ؛ } static static signradio (url url) يلقي الاستثناء {long correncybttime = system.currentTimeMillis () ؛ بيانات السلسلة = "secretKey = F1B79C865C424BE46183A2F0A49A0F15" + "& timestamp =" + currency ؛ System.out.println ("url:" + url + data) ؛ System.out.println ("url =" + urlencoder.encode (url + data ، "utf-8")) ؛ توقيع السلسلة = HMACSHA1UTIL.GetSignature (urlencoder.encode (url + data ، "UTF-8") ، "F1B79C865C424BE46183A2F0A49A0F15") ؛ إرجاع URL + Data + "& Signature =" + Signature ؛ } سلسلة ثابتة خاصة HMAC_SHA1 (مفتاح السلسلة ، بيانات السلسلة) {string respring = "" ؛ حاول {datas = datas.replace ("٪ 3a" ، "٪ 3a") ؛ البيانات = datas.replace ("٪ 2f" ، "٪ 2F") ؛ البيانات = datas.replace ("٪ 3D" ، "٪ 3D") ؛ byte [] data = key.getBytes ("utf-8") ؛ . // إنشاء كائن MAC مع خوارزمية MAC المحددة MAC MAC = MAC.GETINSTANCE ("HMACSHA1") ؛ // تهيئة كائن Mac باستخدام مفتاح Mac.init (secretkey) ؛ byte [] text = datas.getBytes ("utf-8") ؛ // أكمل عملية Mac Byte [] text1 = mac.dofinal (text) ؛ Repring = new BASE64ENCODER (). ENCODEBUFFER (text1) ؛ Repring = urlencoder.encode (Repring ، "UTF-8") ؛ Repring = respring.replace ("٪ 0a" ، "") ؛ Repring = respring.replace ("٪ 0d" ، "") ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } إعادة الإرجاع ؛ }/** * تحميل الصورة المزروعة * zxiao 2016/09/01 * * param fileid */public static string sortgedCuteWebImage (ملف multipartfile ، سلسلة fileId ، سلسلة x ، السلسلة y ، السلسلة W ، سلسلة H) يلقي unsuportedEncodingException {string fileid = fileid ؛ String [] cropWidths = new String [] {"50"} ؛ // عرض المحاصيل // list <string> list = new list <string> () ؛ // list <string> list = new ArrayList <string> (5) ؛ ArrayList <string> listCropWidths = new ArrayList <String> () ؛ listcropwidths.add ("400") ؛ // string [] cropheights = new string [] {"50"} ؛ // ArrayList ArrayList <String> listCropHeights = new ArrayList <String> () ؛ listcropheights.add ("300") ؛ int cropx = integer.parseint (x) ؛ // crop x إحداثيات int cropy = integer.parseint (y) ؛ // crop y إحداثيات // string [] cropfixs = new string [] {"l"} ؛ // مجموعة صورة صورة محصول مجموعة arraylist <string> listcropfixs = new arraylist <sring> () ؛ listcropfixs.add ("l") ؛ String sourcesuffix = "jpg" ؛ // map base factix sourcefix = "" ؛ // base map logo/* boolean isResuffix = true ؛ ارتفاع int = 1000 ؛ عرض int = 750 ؛ Mark string = "t" ؛ mode mode = "w" ؛*/ string url = sign (cropurl) + "fileId =" + fileId + "& cropWidths =" + listCropWidths + "& cropheights =" + listCropHeightss + "& cropX = "& sourceFix =" + sourceFix ؛ System.out.println ("url:" + url) ؛ httpurlConnection conn = null ؛ OutputStream Outstream = NULL ؛ BufferedInputStream Bin = NULL ؛ حاول {bin = جديد bufferedInputStream (file.getInputStream ()) ؛ conn = (httpurlConnection) url new url (url) .OpenConnection () ؛ Conn.SetConnectTimeout (15000) ؛ Conn.SetRequestMethod ("post") ؛ conn.setDooutput (صواب) ؛ // conn.setFixedLengthStreamingMode (file.length ()) ؛ Conn.SetRequestProperty ("نوع المحتوى" ، "التطبيق/X-WWW-Form-urlencoded") ؛ Conn.SetRequestProperty ("طول المحتوى" ، file.getSize () + "") ؛ // conn.setRequestProperty ("Range" ، "bytes ="+"") ؛ // قم بتعيين ترميز حرف HttPurlConnection Conn.SetRequestProperty ("قبول-charset" ، "UTF-8") ؛ OutStream = conn.getOutputStream () ؛ Byte [] buf = new byte [1024] ؛ int len = 0 ؛ int lencount = 0 ؛ بينما ((len = bin.read (buf))! = -1) {OutStream.write (buf ، 0 ، len) ؛ // ok lencount = lencount + len ؛ } int responseCode = conn.getResponsecode () ؛ if (responseCode == 200) {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ } آخر {inputStream instream = conn.getInputStream () ؛ byte [] data1 = readAsbyTearr (instream) ؛ String JSON = سلسلة جديدة (data1) ؛ instream.close () ؛ إرجاع JSON ؛ }} catch (استثناء e) {E.PrintStackTrace () ؛ } أخيرًا {try {if (overstream! = null) {OutStream.Close () ؛ }} catch (ioException e) {E.PrintStackTrace () ؛ }} الإرجاع null ؛ }/** يجب حفظ الصورة محليًا بعد التحميل والاقتصاص * zxiao 2016/09/01 * param ، * param x * param y * @param h * return * @therexception */public static string submitcropimage (multiGerfile file ، inte x ، المجلد = system.getProperty ("java.io.tmpdir") ؛ ملف tempdir = ملف جديد (مجلد) ؛ // إذا لم يكن المجلد موجودًا ، فقم بإنشاء (! tempdir .exists () &&! tempdir .isdir ()) {// system.out.println ("// not arugists") ؛ tempdir .mkdir () ؛ } // سلسلة ملفات مؤقت مضغوطة srcpath = Folder+"ScaleTemp.jpg" ؛ // احصل على لاحقة الملف/*uploadFile = ملف جديد (SRCPath) ؛ inputStream inputStream = file.getInputStream () ؛ FileInputStream FS = (fileInputStream) inputStream ؛ String srcimg = urlencoder.encode (file.getoriginalfilename () ، "utf-8") ؛ لاحقة السلسلة = srcimg.substring (srcimg.lastindexof (".")+1) ؛*///crop الصورة cutimgutils o = cutimgutils جديدة (x ، y ، w ، h) ؛ O.SetSrcPath (SRCPath) ؛ O.SetSubPath (المجلد+"uptemp.jpg") ؛ ملف tempfile = o.cut ("jpg") ؛ سلسلة s = submitImage (tempfile) ؛ العودة s ؛ }/** * احصل على عرض الصورة التي تم تحميلها * zxiao 2016/09/09 * param file * return */public static int getImGwidth (ملف multipartfile) يلقي ioException {inputStream is = null ؛ BufferedImage SRC = NULL ؛ int ret = -1 ؛ حاول {iS = file.getInputStream () ؛ src = javax.imageio.imageio.read (IS) ؛ ret = src.getWidth (null) ؛ // الحصول على عرض الصورة المصدر IS.Close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } إرجاع ret ؛ }/** * احصل على صورة تم تحميلها عالية * zxiao 2016/09/09 * param file * @return */public static int getimgheight (ملف multipartfile) {inputStream = null ؛ BufferedImage SRC = NULL ؛ int ret = -1 ؛ حاول {iS = file.getInputStream () ؛ src = javax.imageio.imageio.read (IS) ؛ ret = src.getheight (null) ؛ // الحصول على ارتفاع صورة المصدر IS.Close () ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } إرجاع ret ؛ } /*** صورة المقياس (القياس حسب الارتفاع والعرض)* كائن ملف param* param النتيجة عنوان الصورة* param ارتفاع مقياس الارتفاع* param width width* param bb هو أنه من الضروري ملء عندما يكون المقياس غير صحيح: TRUT هو ملء ؛ خطأ لا يملأ. */ مقياس الفراغ الثابت العام (ملف multipartfile ، نتيجة السلسلة ، ارتفاع int ، عرض int ، Boolean BB) {try {double ratio = 0.0 ؛ // scaling/*commonsmultipartfile cf = (commonsmultipartfile) ملف ؛ diskfileitem fi = (diskfileItem) cf.getFileItem () ؛ file f = fi.getStoreLocation () ؛*/// file f = file new (srcimageFile) ؛ inputStream inputStream = file.getInputStream () ؛ BufferedImage BI = Imageio.Read (inputStream) ؛ عنصر الصورة = bi.getScaledInstance (العرض ، الارتفاع ، bi.scale_smooth) ؛ // حساب المقياس if ((bi.getheight ()> الارتفاع) || (bi.getWidth ()> width)) {if (bi.getheight ()> bi.getWidth ()) {ratio = (new integer (height)). doublevalue () / bi.getheight () ؛ } آخر {ratio = (new integer (width)). doublevalue () / bi.getWidth () ؛ } affinetransformop op = new AffinetRansformOp (Affinetransform .getScaleInstance (نسبة ، نسبة) ، خالية) ؛ item = op.filter (bi ، null) ؛ } if (bb) {// fill BufferedImage Image = new BufferedImage (العرض ، الارتفاع ، bufferedImage.type_int_rgb) ؛ graphics2d g = image.creategraphics () ؛ G.SetColor (color.hite) ؛ G.FillRect (0 ، 0 ، العرض ، الارتفاع) ؛ if (width == item.getWidth (null)) g.drawImage (itemp ، 0 ، (height - item.getheight (null)) / 2 ، item.getwidth (null) ، item.getheight (null) ، color.white ، null) ؛ else g.drawimage (itemp ، (width - item.getWidth (null)) / 2 ، 0 ، item.getWidth (null) ، item.getheight (null) ، color.hite ، null) ؛ G.Dispose () ؛ عنصر = صورة ؛ } imageio.write ((bufferedImage) ، "JPG" ، ملف جديد (نتيجة)) ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }} public static void main (string [] args) {try {/* file file = file new ("e: // bole // doc // service interface document // bole service interface description v1.0.docx") ؛ System.out.println ("file =" + file) ؛ String json = submitfile (file) ؛ System.out.println ("json =" + json) ؛*/} catch (استثناء e) {eprintstacktrace () ؛ }}} أدوات زراعة الصورة
package com.shengya.service.utils ؛ import javax.imageio.imageio ؛ import javax.imageio.imagereadparam ؛ import javax.imageio.imagereader ؛ java.io.fileInputStream ؛ استيراد java.io.ioException ؛ استيراد java.util.iterator ؛/*** تم إنشاؤه بواسطة المسؤول في 2016/9/1. */cutimgutils الفئة العامة {// === اسم مسار الصورة المصدر مثل: c: /1.jpg string srcpath ؛ // === اسم مسار تخزين صورة مقطع. على سبيل المثال: C: /2.jpg Subpath Subpath ؛ public void setSrcPath (String srcpath) {this.srcpath = srcpath ؛ } public void setSubPath (String subpath) {this.subpath = subpath ؛ } // === slice point x تنسيق خاص int x ؛ الخاص int y ؛ // === Slift Point Width عرض INT الخاص ؛ ارتفاع int الخاص public cutimgutils () {} public cutimgutils (int x ، int y ، int width ، int height) {if (x <0) {x = 0 ؛ } آخر {this.x = x ؛ } if (y <0) {y = 0 ؛ } آخر {this.y = y ؛ } this.width = width ؛ this.height = الارتفاع ؛ } /** * * اقتصاص الصورة وحفظ الصورة الجديدة بعد المحاصيل. */ cut file public () يلقي ioException {fileInputStream Is = null ؛ ImageInputStream iis = null ؛ حاول {// قراءة ملفات الصور هي = جديدة fileInputStream (SRCPath) ؛ /** * * إرجاع ITERATOR يحتوي على جميع المتقاعدين المسجلين حاليًا ، والذين يدعيون أنهم قادرون على فك تشكيل التنسيق المحدد. المعلمات: FormatName - يحتوي على اسم التنسيق غير الرسمي. * * (مثل "jpeg" أو "tiff") ، إلخ. imagereader reader = it.next () ؛ // احصل على دفق الصورة iis = imageio.createImageInputStream (IS) ؛ /** * * <p> * IIS: اقرأ المصدر. صحيح: ابحث إلى الأمام فقط * </p> *. ضع علامة عليها على أنها "البحث إلى الأمام فقط". * * يعني هذا الإعداد أنه سيتم قراءة الصور المضمنة في مصدر الإدخال فقط بالترتيب ، مما قد يسمح للقارئ * * بتجنب تخزين أجزاء الإدخال التي تحتوي على البيانات المرتبطة بالصور التي كانت قراءتها مسبقًا. */ reader.setInput (iis ، true) ؛ /** * * <p> * فئة تصف كيفية فك تشفير التدفقات * <p> *. تستخدم لتحديد كيفية تحويل صورة أو مجموعة من الصور من دفق في سياق إطار I/O * * * * * * * * عند الإدخال. البرنامج المساعد لتنسيق صورة محدد * * * سيتم إرجاع مثيل ImageReadParam من طريقة GetDefaultReadParam الخاصة بتطبيق ImageReader. */ imagereadparam param = reader.getDefaultReadParam () ؛ /** * * منطقة محصول الصورة. يحدد المستطيل مساحة في مساحة الإحداثيات ، والتي يمكن تعريفها بواسطة الإحداثيات (x ، y) ، عرض ، وارتفاع قمة الرأس اليسرى العلوية لكائن المستطيل **. */ Rectangle Rect = مستطيل جديد (x ، y ، العرض ، الارتفاع) ؛ // توفير bufferedimage لاستخدامه كهدف لفك تشفير بيانات البكسل. param.setsourceregion (Rect) ؛ /** * استخدم ImagereadParam المقدمة لقراءة الكائن المحدد عن طريق فهرسة ImageIndex وإرجاع * * باعتباره مخزن مؤقت كامل. */ bufferedImage bi = reader.read (0 ، param) ؛ // حفظ صورة جديدة Imageio.write (Bi ، "JPG" ، ملف جديد (SubPath)) ؛ ملف الملف = ملف جديد ("subpath") ؛ ملف الإرجاع ؛ } أخيرًا {if (is! = null) is.close () ؛ إذا (iis! = null) iis.close () ؛ }} CUT Public Cut (String Fuctix) يلقي ioException {fileInputStream IS = null ؛ ImageInputStream iis = null ؛ حاول {// قراءة ملف الصورة هو = جديد fileInputStream (srcpath) ؛ // هو = inputStream ؛ /** * إرجاع ITERATOR يحتوي على جميع الصور المسجلة حاليًا * * تدعي أنها قادرة على فك تشكيل التنسيق المحدد. المعلمات: FormatName - يحتوي على اسم التنسيق غير الرسمي. * * (مثل "jpeg" أو "tiff") ، إلخ. */ String factixname = null ؛ if (lugfix.equals ("gif")) {fudcixname = "gif" ؛ } آخر if (lugfix.equals ("png")) {fuckname = "png" ؛ } else {fuckname = "jpg" ؛ } iterator <ImagerEader> it = imageio .getImagerEadersByFormatName (factixname) ؛ imagereader reader = it.next () ؛ // احصل على دفق الصورة iis = imageio.createImageInputStream (IS) ؛ /** * * <p> * IIS: اقرأ المصدر. صحيح: ابحث إلى الأمام فقط * </p> *. ضع علامة عليها على أنها "البحث إلى الأمام فقط". * * يعني هذا الإعداد أنه سيتم قراءة الصور المضمنة في مصدر الإدخال فقط بالترتيب ، مما قد يسمح للقارئ * * بتجنب تخزين أجزاء الإدخال التي تحتوي على البيانات المرتبطة بالصور التي تم قراءتها مسبقًا. */ reader.setInput (iis ، true) ؛ /** * * <p> * Class that describes how to decode streams* <p> * . Used to specify how to convert an image or set of images from a stream in the context of a Java Image I/O * * framework when input. Plugin for a specific image format* * * An instance of ImageReadParam will be returned from its ImageReader implementation's getDefaultReadParam method. */ ImageReadParam param = reader.getDefaultReadParam(); /** * * Image crop area. Rectangle specifies an area in the coordinate space, which can be defined by the coordinate (x, y), width, and height of the upper left vertex of the Rectangle object **. */ Rectangle rect = new Rectangle(x, y, width, height); // Provide a BufferedImage to use it as the target for decoding pixel data. param.setSourceRegion(rect); /** * Use the provided ImageReadParam to read the object specified by indexing imageIndex and return * * as a complete BufferedImage. */ BufferedImage bi = reader.read(0, param); // Save new image ImageIO.write(bi, "jpg", new File(subpath)); File file = new File(subpath); return file; } finally { if (is != null) is.close(); if (iis != null) iis.close(); }}}遇到的问题总结:
-裁剪图片发生偏移现象<br />解决办法:使用压缩后的图片等比例收集裁切坐标信息
-MultipartFile 和File之间相互转化
第一种方法:
MultipartFile file = xxx; CommonsMultipartFile cf= (CommonsMultipartFile)file; DiskFileItem fi = (DiskFileItem)cf.getFileItem(); File f = fi.getStoreLocation();
会在项目的根目录的临时文件夹下生成一个文件;
第二种方法:
transferTo(File dest);
会在项目中生成一个新文件;
第三种方法:
File f = (File) xxx 强转即可。前提是要配置multipartResolver,要不然会报类型转换失败的异常。
<bean id="multipartResolver"> <property name="maxUploadSize" value="104857600"/> <property name="maxInMemorySize" value="4096"/> </bean>
没试过;
第四种方法:
Workbook wb = Workbook.getWorkbook(xxx .getInputStream());
转换为输入流,直接读取;
第五种方法:
byte[] buffer = myfile.getBytes();
先转换为字节数组,没试过;
第六种方法:
直接转成输入流
MultipartFile file=xxx; is = file.getInputStream(); src = javax.imageio.ImageIO.read(is); ret = src.getWidth(null); // 得到源图宽
مراجع:
jcop api:http://code.ciaoca.com/jquery/jcrop/.
ما سبق هو كل محتوى هذه المقالة. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.