當前位置:首頁 » 文件管理 » android文件分割上傳

android文件分割上傳

發布時間: 2022-02-23 13:30:12

Ⅰ android端 file文件上傳

我們做web開發的時候幾乎都是通過一個表單來實現上傳。並且是post的方式。而且都必須要加個參數enctype = "multipart/form-data".然後再上傳後台用各種框架里的插件之類的就可以接收了,並沒有關心過這個文件具體是怎麼傳的。現在用android開發 沒有那些框架了,所以不得不關心一下了。

其實我們這種前後台的交互是用的HTTP協議。而http協議默認是傳的字元串。所以我們上傳文件的話要加enctype = "multipart/form-data"這個參數來說明我們這傳的是文件不是字元串了。而我們做web開發的時候,瀏覽器是自動解析HTTP協議的。裡面傳的哪些東西我們不用管。只要記住幾個參數就行。而我們要上傳的文件報文是保存在請求的頭文件裡面的。下面就是上傳文件頭文件的格式:

POST/logsys/home/uploadIspeedLog!doDefault.html HTTP/1.1
Accept: text/plain, */*
Accept-Language: zh-cn
Host: 192.168.24.56
Content-Type:multipart/form-data;boundary=-----------------------------7db372eb000e2
User-Agent: WinHttpClient
Content-Length: 3693
Connection: Keep-Alive
-------------------------------7db372eb000e2
Content-Disposition: form-data; name="file"; filename="kn.jpg"
Content-Type: image/jpeg
(此處省略jpeg文件二進制數據...)
-------------------------------7db372eb000e2--
這就是Http上傳發送的文件格式。而我們要發送的時候必然要遵循這種格式來並且不能出一點差錯包括每行後面的回車,下面一段文字是網上找的感覺寫的比較精彩。(尊重原創:原文地址)

紅色字體部分就是協議的頭。給伺服器上傳數據時,並非協議頭每個欄位都得說明,其中,content-type是必須的,它包括一個類似標志性質的名為boundary的標志,它可以是隨便輸入的字元串。對後面的具體內容也是必須的。它用來分辨一段內容的開始。Content-Length: 3693 ,這里的3693是要上傳文件的總長度。綠色字體部分就是需要上傳的數據,可以是文本,也可以是圖片等。數據內容前面需要有Content-Disposition, Content-Type以及Content-Transfer-Encoding等說明欄位。最後的紫色部分就是協議的結尾了。

注意這一行:

Content-Type: multipart/form-data; boundary=---------------------------7db372eb000e2

根據 rfc1867, multipart/form-data是必須的.

---------------------------7db372eb000e2 是分隔符,分隔多個文件、表單項。其中b372eb000e2 是即時生成的一個數字,用以確保整個分隔符不會在文件或表單項的內容中出現。Form每個部分用分隔符分割,分隔符之前必須加上"--"著兩個字元(即--{boundary})才能被http協議認為是Form的分隔符,表示結束的話用在正確的分隔符後面添加"--"表示結束。

前面的 ---------------------------7d 是 IE 特有的標志,Mozila 為---------------------------71.

每個分隔的數據的都可以用Content-Type來表示下面數據的類型,可以參考rfc1341

Ⅱ 急!求安卓版的文件動力,或者能分割文件的軟體(手機端的)

這個還真沒辦法....你要是流量多的話把他上傳到網盤 然後內存卡換回來再下載 這個要很多流量哦 不要亂試 不然只能乖乖的去找電腦 還是跟別人借下手機把內存卡裝他手機用藍牙傳給他然後再裝回你的手機就行了。 對了也可以下載個解壓縮軟體 把文件壓縮了應該會減小文件的體積 然後傳到手機 換張內存卡再解壓出來 我沒試過哦不可以不要怪我...

Ⅲ ISO文件怎麼進行分割上傳

可以用winrar進行分卷壓縮,這樣就會分成若干個指定大小的文件,然後上傳即可。

Ⅳ 安卓開發上傳txt到file讀取出來多了一個長度

Copyright © 1999-2020, CSDN.NET, All Rights Reserved

dst
登錄

yeqiufeng
關注
Android開發-asset中文件超過1M的解決方法 轉載
2012-07-03 18:52:21

yeqiufeng

碼齡20年

關注
res/raw和assets的相同點:

1.兩者目錄下的文件在打包後會原封不動的保存在apk包中,不會被編譯成二進制。

res/raw和assets的不同點:
1.res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即R.id.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類。
2.res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾

讀取文件資源:

1.讀取res/raw下的文件資源,通過以下方式獲取輸入流來進行寫操作

InputStream is = getResources().openRawResource(R.id.filename);
2.讀取assets下的文件資源,通過以下方式獲取輸入流來進行寫操作

AssetManager am = null ;
am = getAssets();
InputStream is = am.open("filename" );
在未知目錄下有哪些文件,該去和獲取這些文件的名稱並把文件拷貝到目標目錄中呢?

String[] files = getAssets().list("");
來獲取assets目錄下所有文件夾和文件的名稱,再通過這些名稱再讀取我們想要的文件。

Android 對asset與raw的限制

在讀取這兩個資源文件夾中的文件時會有一定的限制,即單個文件大小不能超過1M ,如果讀取超過1M的文件會報 「Data exceeds UNCOMPRESS_DATA_MAX (1314625 vs 1048576)「 的IOException。

如何解決呢:

首先想到的是分割文件,再去合並並文件。

假設我們現在要把一個超過1M的文件在程序啟動時拷貝到sdcard中

1.先把需要拷貝的大文件分割成若干個大小小於1M的小文件(事先寫個程序來分隔或者使用一些工具,我這里直接寫了個程序),把這些 小文件放在assets文件夾中。

2.在程序啟動時我們獲取這些小文件的文件名,當然我們得事先規定小文件的命名方式方便我們來獲取這些文件名。
3.通過獲得的小文件名分別建立輸入流來合並成一個大文件,並拷貝到sdcard中。

Ⅳ android listView讀取txt文檔後怎麼分割文件並列表顯示每頁5條,新手請多多指教!

你不是每行一條嗎,計算幾個換行符就是了

Ⅵ Android上大文件分片上傳 具體怎麼弄

正常情況下,一般都是在長傳完成後,在伺服器直接保存。

?

1
2
3
4
5
6
7

public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
//保存文件
context.Request.Files[0].SaveAs(context.Server.MapPath("~/1/" + context.Request.Files[0].FileName));
context.Response.Write("Hello World");
}

最近項目中用網路開源的上傳組件webuploader,官方介紹webuploader支持分片上傳。具體webuploader的使用方法見官網http://fex..com/webuploader/。

?

1
2
3
4
5
6
7
8
9
10
11
12

var uploader = WebUploader.create({
auto: true,
swf:'/webuploader/Uploader.swf',
// 文件接收服務端。
server: '/Uploader.ashx',
// 內部根據當前運行是創建,可能是input元素,也可能是flash.
pick: '#filePicker',
chunked: true,//開啟分片上傳
threads: 1,//上傳並發數
//由於Http的無狀態特徵,在往伺服器發送數據過程傳遞一個進入當前頁面是生成的GUID作為標示
formData: {guid:"<%=Guid.NewGuid().ToString()%>"}
});

webuploader的分片上傳是把文件分成若干份,然後向你定義的文件接收端post數據,如果上傳的文件大於分片的尺寸,就會進行分片,然後會在post的數據中添加兩個form元素chunk和chunks,前者標示當前分片在上傳分片中的順序(從0開始),後者代表總分片數。

Ⅶ android怎麼同時上傳文件和數據

Part[] parts;
文字
parts[i++] = new StringPart(key, value, HTTP.UTF_8);
附件
// parts[i++] = new FilePart(file.getKey(), file.getValue());
// parts[i++] = new FilePart(file.getKey(),
// file.getValue().getName(),
// file.getValue(), null, HTTP.UTF_8);
parts[i++] = new FilePart(file.getKey(), file.getValue().getName(),file.getValue());
上傳
httpPost.setEntity(new MultipartEntity(parts, httpPost.getParams()));
去下載開源的StringPart FilePart MultipartEntity

Ⅷ android實現文件上傳的功能

我是這樣做的
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("*/*");
intent.addCategory(Intent.CATEGORY_OPENABLE);
startActivityForResult(Intent.createChooser(intent, "請選擇一個要上傳的文件"), 1);
然後選擇文件後調用
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
String url= uri.toString();


獲得路徑,根據路徑調用
public String convertCodeAndGetText(String str_filepath) {// 轉碼\
try {
File file1 = new File(str_filepath);
file_name = file1.getName();
FileInputStream in = new FileInputStream(file1);
byte[] buffer = new byte[(int) file1.length() + 100];
int length = in.read(buffer);
load = Base64.encodeToString(buffer, 0, length,
Base64.DEFAULT);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

return load;
}
對文件進行編碼

Ⅸ 上傳視頻文件太大 怎麼分割 壓縮

分割和壓縮只需要對視頻文件執行一項,達到將視頻縮小的目的就可以,我們通常是用視頻文件壓縮縮小視頻文件,那麼這里就講解壓縮視頻文件的操作過程;
1、參考工具(迅捷視頻壓縮軟體)

2、打開工具點擊視頻壓縮。
3、點擊頁面中的選項「選擇文件」。
4、點擊文件頁面下的輸出選擇。
5、小編將視頻輸出mp4自定義設置。
6、點擊頁面右方開始壓縮按鍵。

Ⅹ 如何html5分割上傳實現超大文件無插件網頁上傳

//代碼不支持IE因為IE對HTML5支持不好
$("#file").change(function(event){
varfile=$("#file")[0].files[0];
PostFile(file,0);

});
functionPostFile(file,i){
varname=file.name,//文件名
size=file.size,//總大小shardSize=2*1024*1024,
shardSize=2*1024*1024,//以2MB為一個分片
shardCount=Math.ceil(size/shardSize);//總片數
if(i>=shardCount){
return;
}
//計算每一片的起始與結束位置
varstart=i*shardSize,
end=Math.min(size,start+shardSize);
//構造一個表單,FormData是HTML5新增的
varform=newFormData();
form.append("data",file.slice(start,end));//slice方法用於切出文件的一部分
form.append("lastModified",file.lastModified);//slice方法用於切出文件的一部分
form.append("name",name);
form.append("total",shardCount);//總片數
form.append("index",i+1);//當前是第幾片
//Ajax提交
$.ajax({
url:"/test/AjaxFile",
type:"POST",
data:form,
async:true,//非同步
processData:false,//很重要,告訴jquery不要對form進行處理
contentType:false,//很重要,指定為false才能形成正確的Content-Type
success:function(data){
if(data){
i=data++;
varnum=Math.ceil(i*100/shardCount);
$("#output").text(num+'%');
PostFile(file,i);
}
}
});
}

熱點內容
公眾號雲伺服器 發布:2024-10-27 04:15:14 瀏覽:795
如何設置第二個窗口密碼 發布:2024-10-27 04:06:50 瀏覽:317
java插入演算法 發布:2024-10-27 03:40:42 瀏覽:812
浙江伺服器dns地址雲空間 發布:2024-10-27 03:31:19 瀏覽:677
編譯器的讀音 發布:2024-10-27 03:31:11 瀏覽:474
逆水寒和魔獸哪個配置高 發布:2024-10-27 03:30:35 瀏覽:908
java可變長度數組 發布:2024-10-27 03:30:35 瀏覽:401
linux查詢命令的版本 發布:2024-10-27 03:24:38 瀏覽:977
編程3次方 發布:2024-10-27 03:19:48 瀏覽:20
如何提取手機緩存視頻 發布:2024-10-27 02:55:26 瀏覽:371