安卓文件上传
A. 怎么把电脑上的文件传到安卓手机上
可以使用数据线连接电脑直接拷入手机上,也可使用网络传输,如登陆qq、微信,使用文件传输助手即可。
B. 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
C. 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;
}
对文件进行编码
D. android okhttp3.0文件上传是用什么方式上传的
手机与电脑连接打91助手点击文件管理找存储卡直接拷贝行
E. 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开始),后者代表总分片数。
F. android 怎样上传文件至SharePoint
$File = "d:\xxx\backup\url.txt"
$backPath = "d:\xx\backup\"
$errorPath = $backPath+"error.txt"
$importListPath = $backPath+"importList.txt"
$enableBackuo = $true
$enableDelete = $false Write-Host "文件备份:" -NoNewline
if($enableBackuo) {Write-Host "允许" -ForegroundColor green }
else {Write-Host "不允许" -ForegroundColor red}
Write-Host "文件删除:" -NoNewline
if($enableDelete) {Write-Host "允许" -ForegroundColor green}
else {Write-Host "不允许" -ForegroundColor red}
Write-Host
">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
-ForegroundColor green
#下载页面的全部信息包含完整的html结构
function WebClientDownload($link, $dir){
$Username = "domain\user"
$Password = "password"
$WebClient = New-Object System.Net.WebClient
$WebClient.Credentials = New-Object System.Net.Networkcredential($Username,
$Password)
$WebClient.DownloadFile( $link, $dir )
}
#下载页面的SharePoint信息,和ribbon菜单中的‘另存为副本’效果一样
function DownLoadPages($file,$dir){
#Downloading file
$binary = $file.OpenBinary()
$stream = New-Object System.IO.FileStream($dir), Create
$writer = New-Object System.IO.BinaryWriter($stream)
$writer.write($binary)
$writer.Close()
}
#正则过滤aspx页面
function GetMatches($link){
$reg = "(?http://[^/]+/.*)Pages(?
.*\/)(?.*)\.aspx?(?.*$)"
if($link -match $reg){
return $Matches
}
return $null
}
Get-Content $File | foreach-Object {
$regResult = GetMatches($_)
$webUrl = $regResult.web
if($regResult -eq $null){
Write-Host "$($_) --> 失败,文件格式不对" -ForegroundColor red
Out-File -FilePath $errorPath -InputObject "$($_) --无法处理" -Append
}
else{
$web = Get-SPWeb $webUrl
$list = $web.lists["页面"]
#设置导出文件的路径
$itemUrl = $regResult.page+".aspx"
$folderUrl = $regResult.dir
$fileUrl = ("pages",$folderUrl,$itemUrl -Join "")
$directory = ($backPath,$web.Title.ToString(),$folderUrl -Join "")
$outFileUrl = ($directory,$itemUrl -Join "\")
$spFolder= $web.GetFolder($list.RootFolder.Url + $folderUrl)
#$Items = $list.Items | where {$_['FileLeafRef'] -eq $itemUrl}
try{
$Items = $spFolder.Files.Item($itemUrl)
if($Items){
#判断目录是否存在
if(!(Test-Path $directory)){
New-Item -ItemType Directory -Path $directory
#new-item -path $backPath -name $web.Title.ToString() -type directory
}
DownLoadPages $web.GetFile($fileUrl) $outFileUrl
Out-File -FilePath $importListPath -InputObject
"$($_,$outFileUrl,$folderUrl,$Items.Title -Join ',')" -Append
WebClientDownload $regResult[0]
$outFileUrl.Replace(".aspx","_WebClientDownload.aspx")
if($enableDelete){
$Items.Recycle()
}
Write-Host "$($_) --> 成功" -ForegroundColor green
}
else{
Write-Host "$($_) --> 失败,文件不存在" -ForegroundColor red
#如果URL不存在或已删除,则输出提示
Out-File -FilePath $errorPath -InputObject "$($_,'not exist' -Join '--')"
-Append
}
}
catch{
Write-Host "$($regResult[0]) --> ERROR" -ForegroundColor red
Out-File -FilePath $errorPath -InputObject "$($_.exception) -- $fileUrl"
-Append
}
finally{
$web.dispose()
}
}
}
#去除重复行
$output_importlist = get-content $importListPath | sort | get-unique
Out-File -FilePath $importListPath -InputObject $output_importlist
if((Test-Path $errorPath)){
$output_error = get-content $errorPath | sort | get-unique
Out-File -FilePath $errorPath -InputObject $output_error
}
备份还原部分
?1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86#创建文件夹
function CreateFolder($spList, $folderURL)
{
[Microsoft.SharePoint.SPFolder] $spFolder =
$web.GetFolder(($list.RootFolder.Url,$folderURL -Join "/"))
if(!$spFolder.Exists)
{
if (!$list.EnableFolderCreation)
{
$list.EnableFolderCreation = true;
$list.Update();
}
$folders = $folderURL.Trim('/').Split('/');
$folderPath =""
foreach ($f in $folders)
{
$folderPath += "/" + $f;
$folder = $list.ParentWeb.GetFolder($list.RootFolder.Url +
$folderPath);
if (!$folder.Exists)
{
[Microsoft.SharePoint.SPListItem] $newFolder = $list.Items.Add("",
[Microsoft.SharePoint.SPFileSystemObjectType]::Folder,
$folderPath.Trim('/'));
$newFolder.Update()
$newFolder["_ModerationStatus"] = 0
$newFolder.Update()
}
}
}
}
#上传文件
function UploadFile($Web, $DocLibName, $FilePath, $folderUrl)
{
$Web.AllowUnsafeUpdates = $true;
$List = $web.Lists[$DocLibName]
$RootFolder = $List.RootFolder
$FileName = $FilePath.Substring($FilePath.LastIndexOf("\")+1)
$File= Get-ChildItem $FilePath
$pageUrl = ( $RootFolder.Url + $folderUrl.TrimEnd("/") +"/"+
$File.Name)
try
{
if(!$Web.GetFile($pageUrl).Exists)
{
[Microsoft.SharePoint.SPFolder] $spFolder = $web.GetFolder( $RootFolder.Url
+ $folderUrl)
$fileStream = ([System.IO.FileInfo] (Get-Item
$File.FullName)).OpenRead()
write-host "上传文件 " $File.Name " 到 " $RootFolder.Url + $folderUrl "..."
[Microsoft.SharePoint.SPFile]$spFile = $folder.Files.Add($pageUrl,
[System.IO.Stream]$fileStream, $true)
write-host "上传成功" -ForegroundColor green
write-host
$fileStream.Close()
$spFile.Item.Update()
$spFile.CheckIn("")
$spFile.Approve("")
}
}
catch
{
write-host $_.exception -ForegroundColor red
}
finally
{
$Web.AllowUnsafeUpdates = $false;
}
}
$File = "d:\zhangyuepeng\backup\importlist.txt"
Get-Content $File | foreach-Object {
$items = $_.Split(',')
$Url = $items[0]
$regResult = GetMatches($Url)
$webUrl = $regResult.web
$web = Get-SPWeb $webUrl
$list = $web.Lists["页面"]
if($items[2] -ne "/")
{
CreateFolder $list $items[2]
UploadFile $web "页面" $items[1] $items[2] $items[2]
}
else
{
UploadFile $web "页面" $items[1] "" $items[2]
}
$web.dispose()
}
G. Android上传文件的方法有哪些HTTPost可以上传文件吗
可以上传 单数传输文件可以用ftp实现 你服务端开通一个ftp 指定存放的目录然后写个客户端连接 上传到指定的目录后返回文件名称 保存就好了
H. 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
I. 移动开发中,遇到了安卓不能支持HTML5文件上传的问题,怎么解决
PC端上传文件多半用插件,引入flash都没关系,但是移动端要是还用各种冗余的插件估计得被喷死,项目里面需要做图片上传的功能,既然H5已经有相关的接口且兼容性良好,当然优先考虑用H5来实现。
用的技术主要是:
ajax;
FileReader;
FormData;
HTML结构: