1. 程式人生 > >JavaScript進階(九)JS實現本地檔案上傳至阿里雲伺服器

JavaScript進階(九)JS實現本地檔案上傳至阿里雲伺服器

JS實現本地檔案上傳至阿里雲伺服器

前言

      在前面的部落格中,實現了JS將本地圖片檔案預覽並上傳至阿里雲伺服器的操作。這次需要實現將本地打包好的檔案上傳至阿里雲伺服器。使用前面的圖片檔案上傳方法無法完成此操作。操作介面如下:

 

思路

      本地與服務端傳輸檔案的格式應該是熟悉的Base64格式。首先需要將本地檔案轉換為Base64格式,傳輸至服務端後,在服務端再將Base64格式的檔案轉換為原始檔案。

原始碼解析

控制器

/*--------------移動APP版本管理G030 G031-------------------------*/
medModule.controller('VersionController',function($scope, $http){
$scope.queryFun = function() {
try{
appCallServer($http,"G030",{"mangid":localStorage.mangid
},
//success function
function(data){
$scope.currentVersion = data.version;
},
//fail function
function(data){
//alert("未找到記錄:"+data.errtext);
});
}catch(error){
alert("G030:"+error.message);
}
};
$scope.queryFun();
// 上傳檔案
$scope.doTx = function() {
var appBase64 = document.getElementById("appBase64").innerHTML;	// 獲取檔案Base64編碼內容
var sunny = document.getElementById("appName").innerHTML;	// 獲取檔名稱(PS:瞬間感覺自己好聰明啊~~)
var appName = sunny.substr(0, sunny.length-4); // 獲取子字串。
/*alert(appBase64);
alert(appName);*/
if(appBase64.length == 0){
alert("請選擇有效檔案[該檔案為空]");
}
try {
appCallServer($http, "G031", {
"mangid"   : localStorage.mangid,
"appBase64": appBase64,
"appVersion"  : appName
},
// success function
function(data) {
alert("上傳檔案成功");
},
// fail function
function(data) {
alert("上傳檔案失敗:" + data.errtext);
});
} catch (error) {
alert("G031:" + error.message);
}
};
});

Html指令碼

<script type="text/javascript">  
function loadAppFile(source) {
var file = source.files[0];
if (window.FileReader) {
var fr = new FileReader();
// onloadend讀取完成觸發,無論成功或失敗.如果讀取失敗,則 result的值為 null,否則即是讀取的結果
fr.onloadend = function(e) {
var content = e.target.result;
if(content != null){
var arr = content.toString().split(",");
// 將檔案Base64編碼內容傳至頁面
document.getElementById("appBase64").innerHTML = arr[1];
// 獲取圖片名稱(PS:瞬間感覺自己好聰明啊~~) 
document.getElementById("appName").innerHTML = document.getElementById("appInput").files[0].name;
/* alert(document.getElementById("appInput").files[0].name);
alert(document.getElementById("appName").innerHTML);
alert(document.getElementById("appBase64").innerHTML); */
}
};
fr.readAsDataURL(file);
}
}
</script>

服務端接收程式碼

/************************* 更新移動APP版本資訊 *************************/
public static boolean do_G031(RequestMessage request,ResponseMessage response){
logger.info("\n\n------------Update_APP_G031 debug info-------------\n請求資料包資訊:" + request.json.toString());
if(!Pubf.checkMangSession(request,response)){
return(false);
}
try{
String app,version;
app	= request.getString("appBase64").trim();
version	= request.getString("appVersion").trim();
/*--------------------------- 將應用存進服務端 ---------------------------*/
if(!app.equals("")){
logger.info("開始寫檔案.....");
FileUtil.GenerateApp(app, MyConst.APP_FILE_PATH + version + ".wgt");
logger.info("寫檔案完成.....");
/*-------------------------將應用版本號寫進版本檔案--------------------------*/
logger.info("開始寫入版本號.....");
FileUtil.writeFile(MyConst.APP_VERSION_FILE_PATH, version);
logger.info("寫版本號完成.....");
return(true);
}else{
return(false);
}
}catch(Exception e){
e.printStackTrace();
response.errtext = "移動APP更新失敗";
response.result  = MyConst.ERR_FORMAT;
return(false);
}
}

工具類

<pre name="code" class="java">/**
 * 
 * @param appStr 應用內容
 * @param appFilePath 應用存放路徑
 * @return
 */
public static boolean GenerateApp(String appStr, String appFilePath) { // 對位元組陣列字串進行Base64解碼並生成wgt更新包
if (appStr == null) // 檔案資料為空
return false;
BASE64Decoder decoder = new BASE64Decoder();
try {
// Base64解碼
byte[] b = decoder.decodeBuffer(appStr);
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {// 調整異常資料
b[i] += 256;
}
}
// 生成wgt應用
OutputStream out = new FileOutputStream(appFilePath);
out.write(b);
out.flush();
out.close();
return true;
} catch (Exception e) {
return false;
}
}

讀取到的檔案內容如下:

 

      由上圖可見,其編碼方式正是我們之前所說的Base64編碼方式。那麼接下來的工作就很好做了。按照之前圖片處理的思路即可。

      期間自己也遇到了一部分問題。例如

<i id="appBase64" hidden="hidden"></i>

<i id="appName" hidden="hidden"></i>

      隱藏元素的位置,儘量將其置於靠近提交Buton的附近,否則在控制器中獲取不到其內容。

      經過以上步驟,就可以實現將更新包上傳至服務端相應更新資料夾中,同時將更新包版本號資訊寫入相應的version.txt檔案內。

程式碼領悟

       將以上程式碼與之前做過的圖片上傳做對比,發現兩者在資料獲取時的方式是不同的,本文使用了。之前做圖片上傳時應用此方法亦可以解決問題。兩者寫入服務端的方法是相同的,均是將Base64編碼內容寫入檔案中。思路清晰了,問題自然會很容易得到解決。

進一步優化

      幸福永不滿足,在以上檔案上傳過程中會遇到較大檔案的上傳,為此可能需要等待1min,甚至若干分鐘,這是讓人無法忍受的事情。為了增強使用者的使用體驗。特為檔案上傳增加進度條美化效果。詳情見下篇部落格。

參考文獻

鳴謝

美文美圖

 

相關推薦

JavaScript JS實現本地檔案阿里伺服器

JS實現本地檔案上傳至阿里雲伺服器 前言       在前面的部落格《 JavaScript進階(八)JS實現圖片預覽並匯入伺服器功能》(點選檢視詳情)中,實現了JS將本地圖片檔案預覽並上傳至阿里雲伺服器的操作。這次需要實現將本地打包好的檔案上傳至阿里雲伺

JavaScript()JS實現本地檔案阿里伺服器

JS實現本地檔案上傳至阿里雲伺服器 前言       在前面的部落格中,實現了JS將本地圖片檔案預覽並上傳至阿里雲伺服器的操作。這次需要實現將本地打包好的檔案上傳至阿里雲伺服器。使用前面的圖片檔案上傳方法無法完成此操作。操作介面如下:   思路       本地與服務端傳輸

JavaScript JS實現本地文件阿裏服務器

ive -s 腳本 字符 length sunny 美化 寫入文件 asc JS實現本地文件上傳至阿裏雲服務器 前言 在前面的博客《 JavaScript進階(八)JS實現圖片預覽並導入服務器功能》(點擊查看詳情)中,實現了JS將本地圖片文件預覽並上傳至阿裏雲

SecureCRT將本地檔案centos7(linux)伺服器

方法一: 上傳檔案只需在shell終端模擬器中輸入命令“rz”,即可從彈出的對話方塊中選擇本地磁碟上的檔案,利用Zmodem上傳到伺服器當前路徑下。 下載檔案只需在shell終端模擬器中輸入命令“sz 檔名”,即可利用Zmodem將檔案下載到本地某目錄下。 通過“File

檔案阿里之OssUtil工具類的使用

什麼是Oss? 阿里雲物件儲存服務(Object Storage Service,簡稱OSS)為您提供基於網路的資料存取服務。使用OSS,您可以通過網路隨時儲存和呼叫包括文字、圖片、音訊和視訊等在內的各種非結構化資料檔案。 簡單來說,Oss支援任意型別的檔案遠端儲存(檔案型

java實現檔案本地伺服器

博主最近在做一個內網專案,內部可以訪問外部資料,但是外部訪問不了內部資料,這也就造成了可能檔案無法上傳,所以博主另闢蹊徑,在本地伺服器上建立一個資料夾專門用來儲存上傳資料。 環境:jdk,tomcat 一、前臺上傳檔案(ajax上傳) <input type=

layui.js實現檔案前端html寫法總結

最近需要寫多檔案上傳功能,用到了layui.js控制元件,現進行總結,因為內容太多這裡只總結了html頁面的內容,java後臺配置對接另一篇文章《layui上傳多檔案後臺程式碼總結(java》,其實官網《layui.js檔案上傳示例》已經寫的很詳細了,我再囉嗦一下。 參考文章如下: layu

js實現檔案

首先,將以下js程式碼放入頁面這裡我判斷的是隻能上傳xls格式的檔案,可以根據自己的需求修改js中的checkExcel方法 [javascript] view plaincopy </pre&

(4)通過呼叫hadoop的java api實現本地檔案到hadoop檔案系統

(1)首先建立java project 選擇eclipse選單上File->New->Java Project。 並命名為UploadFile。 (2)新增必要的hadoop jar包 右鍵選擇JRE System Library,選擇

通過git將本地檔案到碼的方面

1. 在碼雲上建立專案在碼雲首頁頂部,下圖所示,右上角頭像旁邊的加號,滑鼠移上去會顯示下拉的,點選“新建專案”。 2. 安裝Git 下載完成後安裝即可,安裝過程中沒有注意事項,全部預設一直next直到結束!3.配置Git工具安裝完成以後從桌面或開始選單開啟Git工具{點選Git bash 開啟}。 3.

c#將本地檔案伺服器(內網)

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; u

如何把本地檔案github?

(都說git好用,但我覺得git把我弄得像個git……在反反覆覆用git bash的命令列上傳失敗了N次之後,終於可以用命令列把檔案上傳到GitHub了 這中間,還要感謝網路上的各種git教程!!!) 具體操作如下: (需提前安裝好git的終端git bash,以及註冊Gi

檔案七牛伺服器(看完就會)

2018年11月13日星期日 隨筆 筆記 1、上傳檔案到七牛雲 註冊登陸到七牛雲,需要認證資訊才能建立個人儲存空間; 儲存區域介紹 最近更新時間:2018-09-09 15:49:21 儲存區域 地域簡稱 上傳域名

圖片等檔案阿里的STS臨時授權訪問的配置詳解

        當然我也不想把所有步驟傻瓜式的一步一步寫出來,那樣身為一名開發人員就失去了某些意義了,希望你看到我這篇部落格時是已經跟著官方文件操作過失敗後。我先說下大概的思路。首先,在阿里雲官網上得開通訪問控制檯/訪問控制/物件儲存OSS;在OSS中新建一個bucket

本地專案

1、碼雲上新建一個專案 XXXX(專案名) 2、本地建立一個專案資料夾,然後使用git bash(通過專案根目錄右擊或切換目錄轉至)     3、使用 git init 命令   //初始化一個git 本地倉庫此時會在本地建立一個 .git 的資料夾 4、使用git remote add origin

檔案阿里的小操作_java

public WebResponse upload(@RequestParam("file")MultipartFile file) throws Exception{ String uuid

wordpress網站從本地阿里伺服器

/* *  最近利用wordpress做了一個簡單的網站,在本地把它除錯好,但是 *當我上傳到伺服器的時候,出現了好多問題,但是都已經解決,今天我把我遇到的問題與解決的辦法在這裡說一下,希望可以幫助到

PHP實現圖片阿里OSS

       今天博主在實現一個頭像上傳功能,需要將圖片上傳至阿里雲的OSS,所以也是百度、谷歌了一番,但都不是很管用,所以自己研究了一番,並將上傳的方法封裝成一個類進行呼叫,下面向大家分享這個過程,在這之前先下載阿里雲OSS的SDK。   &n

分針網——每日分享:JavaScript(四)js字符串轉換成數字的三種方法

加入職業技能圈 q群:272292492 更多文章:www.f-z.cn 在js讀取文本框或者其它表單數據的時候獲得的值是字符串類型的,例如兩個文本框a和b,如果獲得a的value值為11,b的value值為9 ,那麽a.valu

JavaScript(四)js字串轉換成數字的三種方法

js字串轉換成數字的三種方法       在js讀取文字框或者其它表單資料的時候獲得的值是字串型別的,例如兩個文字框a和b,如果獲得a的value值為11,b的value值為9 ,那麼a.value要小於b.value,因為他們都是字串形式的.       方法主要有三種: