【问题标题】:PHP to ASP.NET code migrationPHP 到 ASP.NET 代码迁移
【发布时间】:2013-04-17 03:37:20
【问题描述】:

我正在将图像从我的 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。有关所用方法的更多信息,请参阅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));

这部分做post

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

【问题讨论】:

  • 您是在问如何上传文件或显示文件?
  • 我可以上传文件,但我必须在我的 ASPNET MVC 根文件夹中放置一个 php 文件,我想知道是否可以将此 php 代码移植到 ASP.NET 中
  • 此文件将图像写入文件..这是您想要的吗?如果您已上传文件,为什么还要再次保存。
  • android 应用程序 获取一张图片并对其进行 base64 编码,然后执行 HttpPost。上面显示的 php 代码是对图像的请求并将其保存到服务器,这是我想要的,但我希望能够在 C# 在我的 asp.net 应用程序上。我尝试从 android 上传到 ASP.NET 的所有指南都不起作用,我发现唯一有效的是使用 php.
  • 看我的回答不管你是从你的网络浏览器还是安卓设备访问它都没有区别。

标签: android asp.net-mvc


【解决方案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 应用程序上传文件并使用 多部分内容类型,您需要添加一些额外的 jar 文件到 你的申请。

需要的文件是apache-mime4jhttpclient, 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) {
}

本例中的 image 变量是一个包含图像的文件 由手机上的摄像头拍摄。

【讨论】:

  • 感谢您的回复 - 虽然我知道如何执行此操作,但这只是从 MVC 中上传。我正在从一个 android 应用程序上传到我的 MVC 服务器。 (主题中有一个 android 标签,但有人将其编辑掉......)如果我以这种方式设置我的控制器,并将 HttpPost 从 android 指向控制器,它就无法识别它。我能够做的是将上面发布的 php 代码放在我的根目录中,并将我的 HttpPost 指向它,它可以工作,但它限制了我能够做的事情,即。我希望在文件名/文件夹目录等中使用模型变量。
  • controller\UploadImage URL 的发布请求没有理由无法工作,即使它来自您的 Android 设备,您能否添加一些日志并向我们展示发生了什么可能有错误在某处,您不必使用 php 来执行此操作。
  • 我不确定如何正确调试它。我有一个与您上面概述的几乎相同的控制器操作。该帖子的android代码是HttpPost("http://&lt;my ip&gt;/Up/Upload");,这是正确的吗?我有一个成功的 try/catch 并执行 System.out.println("Post successful." + the_string_response);,它返回 post successful,然后显示我的索引的 html 代码(因为 return RedirectToAction("Index");)。我知道它可以工作,因为我可以使用 php 代码上传,所以 MVC 控制器操作不起作用或者我将它指向错误的地址?
  • 在您的控制器代码 VS 中放置一个断点,并在您从 Android 设备发布时在调试中运行它。 (是的,它有点棘手)。我怀疑文件被接收为空。
  • 所以问题在于您的 android 应用程序没有使用 encruption 'multipart/form-data' 发布,请添加发布文件的 android 代码。
【解决方案2】:

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

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

感谢你的帮助 Mortalus。

【讨论】:

    猜你喜欢
    • 2017-12-29
    • 2020-01-14
    • 2012-02-27
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多