uploadify火狐上傳不了的解決方案,java版(Spring+SpringMVC+MyBatis)詳細解決方案...

      網友投稿 900 2022-05-30

      由于技術選型的原因,在一個產品中,我選擇了uploadify,選擇它的原因是它有完善的技術文檔說明(http://www.uploadify.com/documentation/),唯一不足的是官方文檔上的例子是用php寫的。而對與我們這些使用Java語言的小生們而言,在遇到問題后發現找到一個適合自己的例子很不好找。特別是當遇到瀏覽器兼容問題的時候,找了好久最終發現按照網上的方式進行編寫了,最終還是會出現莫名其妙的問題,而繼續查找資料的時候,發現講解的并不詳細。

      下面我就把我遇到的這些問題現象、以及解決方案和大家分享一下,希望能夠幫助大家快速解決Java項目中的問題。

      錯誤現象:

      在:IE瀏覽器和谷歌瀏覽器中,當使用uploadify進行文件上傳的時候,是正常的,能夠上傳成功,當使用火狐瀏覽器的時候,發現死活也上傳不了。沒有任何反應,真是氣死人啊。

      解決方法:

      在百度上搜索”uploadify兼容性/uploadify不兼容獲取”,發現搜出很多,但仔細看,發現似乎都是一個人寫的文章。解釋的主要原因是(下面一段摘抄自:http://blog.csdn.net/longlong821/article/details/7785703):

      jquery uploadify在ie下可以正常上傳,在實現異步上傳的時候,每一個文件在上傳時都會提交給服務器一個請求。每個請求都需要安全驗證,session和cookie的校驗。是的,就是這樣。由于jquery uploadify是借助flash來實現上傳的,每一次向后臺發送數據流請求時,ie會自動把本地cookie存儲捆綁在一起發送給服務器。但firefox、chrome不會這樣做,他們會認為這樣不安全。

      Session又稱為會話狀態,是Web系統中最常用的狀態,用于維護和當前瀏覽器實例相關的一些信息。舉個例子來說,我們可以把已登錄用戶的用戶名放在Session中,這樣就能通過判斷Session中的某個Key來判斷用戶是否登錄,如果登錄的話用戶名又是多少。

      我們知道,Session對于每一個客戶端(或者說瀏覽器實例)是“人手一份”,用戶首次與Web服務器建立連接的時候,服務器會給用戶分發一個 SessionID作為標識。SessionID是一個由24個字符組成的隨機字符串。用戶每次提交頁面,瀏覽器都會把這個SessionID包含在 HTTP頭中提交給Web服務器,這樣Web服務器就能區分當前請求頁面的是哪一個客戶端。

      接著結合http://www.jb51.net/article/40380.htm中的例子:

      最關鍵的就是紅字那部份了,要注意的是jsessionid前面那個是個分號而不是問號,寫成問號就作為參數傳遞了

      最后在進行搜索,由于uploadify依賴flash,所以建議安裝針對火狐的Adobeflash插件.

      最后編寫自己的uploadify上傳例子:

      1、編寫jsessionid獲取的例子,在我們項目中,我把它放在了common-session.jsp中,內容如下(這樣寫的原因是,我們的前后臺用的不同的common.jsp,為了前后臺都使用同一套的jsessionid,通過<%@ include file="common-session.jsp" %>包含進去,注意:如果不這樣做,而是分別在兩套common.jsp中寫如下的jsessionid的代碼,最終發現要么后臺能夠使用上傳;要么前臺能夠使用上傳;或者前臺上傳一次之后,再去后臺上傳,發現上傳不了了,反之也是同樣的效果):

      <%@ page isELIgnored=”false” %>

      <%@ page language=”java” pageEncoding=”UTF-8”%>

      <%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c” %>

      <%

      String sessionid =? session.getId();

      %>

      ” scope=”session”/>

      2、在common.jsp中引入上面的"common-session.jsp

      3、編寫后臺java上傳邏輯,這里我是用的是springMVC+Spring+MyBatis,后臺代碼如下(關于下面代碼,并非我所寫,不覺得下面的java代碼是規范的,此處允許大家hehe 和吐槽):

      package XXXX;

      import java.io.File;

      import java.io.InputStream;

      import java.util.ArrayList;

      import java.util.Calendar;

      import java.util.HashMap;

      import java.util.List;

      import java.util.Map;

      import net.sf.json.JSONObject;

      import org.apache.log4j.Logger;

      /**此處略去一部分代碼**/

      @Controller

      @RequestMapping(value = “/import”, method = { RequestMethod.GET,RequestMethod.POST })

      public class ImportController extends BaseController{

      /** 用于打印日志 */

      private static final Logger logger = Logger

      .getLogger(SpecialController.class);

      /**

      * 圖片上傳

      * @param param

      * @param imageFile

      * @return

      */

      @RequestMapping(value = “/uploadPicture”, produces = “text/json”)

      @ResponseBody

      public String uploadPicture(@RequestParam(“file”) MultipartFile imageFile) {

      Map result = new HashMap();

      if (!imageFile.isEmpty()) {

      try {

      Calendar calendar = Calendar.getInstance();//獲取當前時間

      //時間路徑,解壓文件,以年月日創建文件夾

      String dataPath =”/”+calendar.get(Calendar.YEAR)+”/”

      + (calendar.get(Calendar.MONTH)+1)+”/” + calendar.get(Calendar.DATE)+”/”;

      // 原文件名

      String srcName = imageFile.getOriginalFilename();

      //獲取上傳文件后綴

      String suffix = srcName.substring(srcName.lastIndexOf(“.”) + 1,

      srcName.length()).toLowerCase();

      //隨機生成32位id,用于解壓文件目錄

      String uuid = UUIDGenerator.generate();

      //新的文件名,隨機的uuid;

      String picName = uuid +”.”+suffix;

      //上傳圖片生成路徑

      String imgPath =ExtendedServerConfig.getInstance()

      .getStringProperty(“THUMBNAIL_PATH”)+ ExtendedServerConfig.getInstance()

      .getStringProperty(“BACKGROUND_IMG_PATH”)+dataPath;

      //生成圖片預覽路徑

      String picturePath =ExtendedServerConfig.getInstance()

      .getStringProperty(“BACKGROUND_IMG_PATH”)+dataPath+picName;

      //文件夾不存在,則創建

      File destfile = new File(imgPath);

      if(!destfile.exists()){

      destfile.mkdirs();

      }

      // 寫文件

      InputStream fi = imageFile.getInputStream();

      //上傳文件寫入到配置文件夾下

      FileUtils.writeFile(fi, imgPath+picName);

      File file = new File(imgPath+picName);

      if(file.exists()){

      result.put(“imgPath”, picturePath);//返回的圖片預覽路徑

      result.put(“ilename”, srcName);

      }

      } catch (Exception e) {

      e.printStackTrace();

      }

      }

      return JSONObject.fromObject(result).toString();

      }

      }

      4、編寫uploadify的js上傳方法:

      /**

      * 背景圖片上傳

      * @param uploadId 背景設置中"選擇"按鈕的id

      * @param imgDivId 背景設置中"圖片"小預覽圖所在div的Id

      * @param imgSrcId 背景設置中"img標簽的id,給src賦值用到

      * @param bgImgPath 隱藏的文本框值,存儲的是圖片路徑,取消是用到

      * @param childPathOfSelectedElement 表示被選擇了的

      * @param posFlag 表示對應的是針對誰進行標題設置

      *??????????????? "0":表示標題

      *??????????????? "1": 表示列表

      */

      function uploadBackgroundImg(uploadId,imgDivId,imgSrcId,bgImgPath,childPathOfSelectedElement,posFlag){

      $("#"+uploadId).uploadify({

      //是否自動上傳

      'auto':true,

      'height':37,

      'swf': scriptsPath+"/uploadify/uploadify.swf",

      //文件選擇后的容器ID

      'queueID':'uploadItemList',

      'fileObjName':'file',

      //上傳處理程序

      'uploader': basePath+'/import/uploadPicture.action;jsessionid=' + jsessionid,

      uploadify在火狐下上傳不了的解決方案,java版(Spring+SpringMVC+MyBatis)詳細解決方案...

      //允許上傳的文件后綴

      'fileTypeExts':'*.jpg;*.gif;*.png;',

      //上傳文件的大小限制

      'fileSizeLimit':'300MB',

      //上傳數量

      'queueSizeLimit' : 1,

      'queueID': 'fileQueue',

      //上傳到服務器,服務器返回相應信息到data里

      'onUploadSuccess':function(file, data,response){

      var o = $.parseJSON(data);

      var imgPath = o.imgPath;

      if(imgPath=="" || imgPath ==null){

      alert("圖片上傳不成功");

      }else{

      $("#"+imgDivId).show();

      var path = vPath +imgPath;

      $("#"+imgSrcId).attr("src",path);

      $("#"+bgImgPath).val(imgPath);

      var id = selectedElementInfo.get("id"); //獲得id的屬性值

      $.tplComponentListSetting.removeCss(id,childPathOfSelectedElement,"background-image");//移除原來的背景圖片

      var styleCss = $("#generatedCss").text();

      var styleText = "#" + id + childPathOfSelectedElement +" {background-image: url('"+path+"') !important;}";

      //替換或者在最后拼接

      styleCss += "\r\n" + styleText;

      $("#generatedCss").text(styleCss);

      //表示的是標題

      if("0" == posFlag){

      //設置相關的參數信息

      $("." + id + "_titleBackgroundAbsoluteImg").val(path);

      $("." + id + "_titleBackgroundRelativeImg").val(imgPath);

      }

      //表示的是列表

      else if("1" == posFlag) {

      console.log("此處暫時略掉");

      }

      }

      }

      });

      }

      注意上面的'uploader': basePath+'/import/uploadPicture.action;jsessionid=' + jsessionid,

      Java MyBatis Spring

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:HarmonyOS 源碼移植
      下一篇:Coroutine技術學習研究
      相關文章
      亚洲国产视频久久| 亚洲情综合五月天| 亚洲AV人人澡人人爽人人夜夜| 无码专区一va亚洲v专区在线| 亚洲国产精品综合久久20| 亚洲欧洲日产国码www| 老司机亚洲精品影院| 亚洲视频2020| 亚洲人成电影亚洲人成9999网| 久久精品国产精品亚洲蜜月| 亚洲AV无码专区亚洲AV伊甸园 | 国产成人精品日本亚洲直接| 亚洲国产精品白丝在线观看| 亚洲视频欧洲视频| 亚洲六月丁香六月婷婷色伊人 | 亚洲最新在线视频| 亚洲国产模特在线播放| 亚洲制服丝袜一区二区三区| 久久亚洲最大成人网4438| 亚洲欧美综合精品成人导航| 亚洲日韩精品国产一区二区三区| 亚洲精品无码人妻无码| 久久人午夜亚洲精品无码区| 一级毛片直播亚洲| 亚洲伊人成无码综合网 | 日韩亚洲产在线观看| 亚洲中文字幕无码亚洲成A人片| 亚洲最大av资源站无码av网址| 亚洲人成未满十八禁网站| 国产成人精品久久亚洲高清不卡 | 精品国产日韩亚洲一区在线| 内射无码专区久久亚洲| 亚洲午夜福利精品无码| 亚洲日韩小电影在线观看| 亚洲AV无码乱码国产麻豆| 中文字幕亚洲精品资源网| 亚洲一区二区久久| 亚洲高清国产拍精品熟女| 亚洲VA综合VA国产产VA中| 丁香五月亚洲综合深深爱| 久久久久亚洲AV成人无码|