2013-04-17 165 views
2

我从我的android上传图像到我的web服务器。我的web服务器是用ASP.NET MVC编写的。PHP到ASP.NET代码迁移

我可以上传我的形象有HttpPost在Android,然后用下面的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。对于所使用的方法的详细信息,请参阅this link

编辑:代号为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)); 

这部分工作后

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

你问如何上传文件或显示文件? – Mortalus

+0

我可以上传文件,但我必须把我的ASPNET MVC根文件夹中的一个PHP文件,我想知道是否有可能将此代码移植到ASP.NET中 – benallansmith

+1

此文件将图像写入文件..是你想要什么?如果您上传了该文件,为什么要重新保存。 – Mortalus

回答

1

在MVC中上传一个文件只是使用这个例子是令人惊讶的简单:

FORM:

<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-mime4j,httpclient, httpcore and 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) { 
} 

在这种情况下的图像变量是包含由手机上的照相机捕获的图像 文件。

+0

感谢您的回复 - 虽然我知道如何做到这一点,但这只是从MVC内上传。我从Android应用上传到我的MVC服务器。 (一个android标签在主题中,但有人编辑出来......)如果我以这种方式设置我的控制器,并将HttpPost从android指向控制器,它不会识别它。我所能做的就是把上面的php代码放在我的根目录中,并将我的HttpPost指向它,它可以工作,但它限制了我所能做的事情。我希望在文件名/文件夹目录中使用模型变量等 – benallansmith

+1

没有理由,即使它来自您的Android设备,发布请求不会对'controller \ UploadImage' URL起作用,您是否可以添加一些日志和向我们展示发生了什么,可能有某处出现错误,您不必使用PHP来执行此操作。 – Mortalus

+0

我不知道如何正确调试它。我有一个控制器操作几乎与上面概述的相同。该帖子的android代码是'HttpPost(“http:// /Up/Upload”);'这是正确的吗?我有一个成功的try/catch,并执行System.out.println(“Post successful。”+ the_string_response);'返回_post successful_,然后显示我的索引的html代码(因为'return RedirectToAction(“Index” );')。我知道它的工作原理,因为我可以上传使用PHP代码,所以无论是MVC控制器行动不起作用,或者我指向它错误的地址? – benallansmith

1

因此,因为我使用的是base64编码方法,它不起作用。不得不改变我的攻击计划,并使用this answer.

中显示的MultipartEntity方法也必须下载apache-mime4j,httpclient,httpcore和httpmime。它现在正在工作:-)

感谢您的帮助Mortalus。