2

この質問は、stackoverflow やインターネット全体で多く寄せられていることを知っていますが、マルチプラットフォームから .NET REST サービスにイメージをアップロードするための一般的な解決策や最適な解決策はないようです。

このソリューションは、以前にサービス側で尋ねられた質問から見つけました。私の最初の質問は、リンクで指定された特定のサービスに Android から画像をアップロードするための最良かつ最も最適化された方法は何ですか?

2 番目の質問は、アップロードする画像に付随するデータを含む JSON を追加するにはどうすればよいですか? JSON としてではなく、ヘッダー パラメータにデータを追加するソリューションを見たことがありますか? それを行うための完璧な方法は何ですか?

4

3 に答える 3

1

最初の質問について:

Android から画像をアップロードする「最良の」方法は、状況によって大きく異なります。

  • 機密性の高い写真を扱っている場合、「最善の」方法は、より安全にするために SSL 経由でアップロードすることです。
  • 複数の写真をアップロードしますか? おそらく、集約された圧縮-アップロード-解凍方法で十分でしょう。

基本的に私が言っているのは、特定のニーズに最も明白な方法を使用するということです。

質問2について:

この質問を見てください。

getBase64Image メソッドを使用して、クライアント側で画像バイトを取得し、それをサーバーに送信する json にポップできます

于 2013-05-06T04:24:51.873 に答える
0

wcf rest を使用したファイル アップロードの例を次に示します。

[ServiceContract]
interface IUploader
{
[WebInvoke(UriTemplate = "FileUpload?public_id={public_id}&tags={tags}",
  Method = "POST",
  ResponseFormat = WebMessageFormat.Json)]
  UploadImageResult UploadImage(Stream fileContents, string public_id, string tags);
}

public class Uploader : IUploader
{
public UploadImageResult UploadImage(Stream fileContents, string public_id, string tags)
{
try
{
byte[] buffer = new byte[32768];
FileStream fs = File.Create(Path.Combine(rootFolderPath, @"test\test.jpg"));
int bytesRead, totalBytesRead = 0;
do
{
bytesRead = fileContents.Read(buffer, 0, buffer.Length);
totalBytesRead += bytesRead;
fs.Write(buffer, 0, bytesRead);
} while (bytesRead > 0);

fs.Close();
}
catch(Exception ex)
{
...
}
}
}

C# を使用して呼び出すには

// Create the REST URL. 
string requestUrl = @"http://localhost:2949/fileupload?public_id=id&tags=tags";
//file to upload make sure it exist
string filename = @"C:\temp\ImageUploaderService\vega.jpg";

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(requestUrl);
request.Method = "POST";
//request.ContentType = "text/plain";
request.ContentType = "application/json; charset=utf-8";
byte[] fileToSend = File.ReadAllBytes(filename);
request.ContentLength = fileToSend.Length;
using (Stream requestStream = request.GetRequestStream())
 {
 // Send the file as body request. 
 requestStream.Write(fileToSend, 0, fileToSend.Length);
 requestStream.Close();
}

 using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
 {
    Console.WriteLine("HTTP/{0} {1} {2}", response.ProtocolVersion,     (int)response.StatusCode, response.StatusDescription);
    string text;
     using (var sr = new StreamReader(response.GetResponseStream()))
                    {
                        text = sr.ReadToEnd();
                    }

                    dynamic testObj = Newtonsoft.Json.JsonConvert.DeserializeObject(text);

                    Console.WriteLine(string.Format("response url is {0}", testObj.url));
                }

質問 2、例のように、リクエストの URL にキーと値のペアを使用してデータを追加できます。

それが役立つことを願っています。

于 2013-05-14T09:04:48.750 に答える