今天来教大家如何安卓端(手机、平板等)上传到asp.net开发的网站上。
这里我们先要组建一个局域网,当然也可以直接同一电脑上测试,只是这里面要注意一些问题,会在后面讲到。
安卓端是无法将文件直接上传asp.net开发的网站的服务器上的,需要通过asp.net写一个api接口,然后安卓调用此接口,所以整个任务也可以分为两个部份,一个是asp.net端(服务端) 的api接口代码,另一个是安卓端(用户端)的代码。
首先,是asp.net端。
1.启动visual studio.net,新建或打开一个asp.net网站,在网站添加一个用于上传文件的文件夹,我这里取名为upload。
2.在“解决方案资源管理器”上右键“添加新项”,弹出“添加新项”对话框,在对话框中选择“Web服务”,如图1,我这里取名为AndroidUpload,添加后会发现网站根目录上多出了一个AndroidUpload.asmx的文件,在App_code下则多出了一个AndroidUpload.cs文件,打个这个文件,编辑代码如下。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.IO;
/// <summary>
///AndroidUpload 的摘要说明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消对下行的注释。
// [System.Web.Script.Services.ScriptService]
public class AndroidUpload : System.Web.Services.WebService {
public AndroidUpload () {
//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}
[WebMethod]
public bool FileUploadImage(string title, string contect, string bytestr, string ext)
{
string name = "";
if (bytestr == "")
{
return false;
}
try
{
name = DateTime.Now.Year.ToString() + DateTime.Now.Month + DateTime.Now.Day + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second;
bool flag = StringToFile(bytestr, Server.MapPath(@"upload\" + DateTime.Now.Ticks.ToString() + "." + ext));
// @"c:\444\ld1.jpg"
//D:\\" + name + ".jpg
return true;
}
catch
{
return false;
}
}
protected System.Drawing.Image Base64StringToImage(string strbase64)
{
try
{
byte[] arr = Convert.FromBase64String(strbase64);
MemoryStream ms = new MemoryStream(arr);
ms.Write(arr, 0, arr.Length);
System.Drawing.Image image = System.Drawing.Image.FromStream(ms);
ms.Close();
return image;
//return bmp;
}
catch (Exception ex)
{
throw ex;
}
}
/// <summary>
/// 把经过base64编码的字符串保存为文件
/// </summary>
/// <param name="base64String">经base64加码后的字符串 </param>
/// <param name="fileName">保存文件的路径和文件名 </param>
/// <returns>保存文件是否成功 </returns>
private static bool StringToFile(string base64String, string fileName)
{
//string path = Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase) + @"/beapp/" + fileName;
System.IO.FileStream fs = new System.IO.FileStream(fileName, System.IO.FileMode.Create);
System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs);
if (!string.IsNullOrEmpty(base64String) && File.Exists(fileName))
{
bw.Write