2

我正在将图像从我的 android 上传到我的网络服务器。我的 Web 服务器是用 ASP.NET MVC 编写的。

我可以在 android 上使用 HttpPost 上传我的图像,然后使用以下 php 代码:

$base=$_REQUEST['image'];
$binary=base64_decode($base);
header('Content-Type: bitmap; charset=utf-8');
$file = fopen('App_Data/Image.jpg', 'wb');
fwrite($file, $binary);
fclose($file);

我的问题是,是否可以将其转换为我的 ASP.NET MVC?我觉得使用 php 非常有限,因为我不确定如何做一些我可以在 ASP.NET 中做的事情。

我了解 ASP.NET 中的 Request 方法,但我不确定如何执行 base64_decode 部分。

PS。有关所用方法的更多信息,请参阅此链接

编辑: android部分的代码

这部分转换位图并base64对其进行编码

Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/saved_images/2013-04-10--11-51-33-AEST--Fingerprint.jpg");          
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream); //compress to which format you want.
            byte [] byte_arr = stream.toByteArray();
            String image_str = Base64.encodeBytes(byte_arr);
            ArrayList<NameValuePair> nameValuePairs = new  ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("image",image_str));

这部分做post

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost("http://myipaddress/Up/Upload");
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
        HttpResponse response = httpclient.execute(httppost);
4

2 回答 2

1

在 MVC 中上传文件非常简单,只需使用以下示例:

形式:

<form action="controller\UploadImage" method="post" enctype="multipart/form-data">

  <label for="file">Filename:</label>
  <input type="file" name="file" id="file" />

  <input type="submit" />
</form>

不要忘记enctype="multipart/form-data"启用文件编码。

然后在您的控制器中执行以下操作:

[HttpPost]
public ActionResult UploadImage(HttpPostedFileBase file) {

  if (file.ContentLength > 0) {
    var fileName = Path.GetFileName(file.FileName);
    var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
    file.SaveAs(path);
  }

  return RedirectToAction("Index");
}

编辑: 基于以下博客文章:http ://blog.tacticalnuclearstrike.com/2010/01/using-multipartentity-in-android-applications/

为了能够从 Android 应用程序上传文件并使用 Multipart 内容类型,您需要向应用程序添加一些额外的 jar 文件。

需要的文件是apache-mime4jhttpclient、httpcore 和 httpmime。都是 Apache 基金会构建的开源项目。

下载这 4 个文件并将它们添加到您的项目中,然后您应该能够使用以下代码将字符串和文件发布到页面。

这是代码示例:

HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.tumblr.com/api/write");


try {
  MultipartEntity entity = new MultipartEntity();

  entity.addPart("type", new StringBody("photo"));
  entity.addPart("data", new FileBody(image));
  httppost.setEntity(entity);
  HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}

在这种情况下,图像变量是一个文件,其中包含手机上的摄像头捕获的图像。

于 2013-04-17T03:53:33.123 回答
1

所以因为我使用的是 base64 编码方法,所以它不起作用。不得不更改我的攻击计划并使用此答案中显示的 MultipartEntity 方法。

还必须下载 apache-mime4j、httpclient、httpcore 和 httpmime。它现在正在工作:-)

感谢您的帮助 Mortalus。

于 2013-04-18T23:37:38.290 回答