イメージファイルをAzureブロブストアにアップロードするだけですが、ファイルはそこに作成されていますが、ファイルサイズがそれより大きくて、ブラウザでファイルをダウンロードすると、画像として開かれません。バイナリデータを適切にエンコードしてREST API PUT呼び出しを送信する方法
Azureインターフェイスを使用して同じファイルを手動でアップロードしましたが、そのファイルは22kで動作しています。私のコード経由でのアップロードは29kで動作しません。
注:このコードで使用されるすべての例は、テキストファイルのみを送信することに注意してください。たぶんEncoding.UTF8.GetBytes(requestBody);ラインはそれをやっている?
私はBase64では
HttpPostedFileBase hpf = Request.Files[file] as HttpPostedFileBase
byte[] binData;
using (BinaryReader b = new BinaryReader(hpf.InputStream))
binData = b.ReadBytes(hpf.ContentLength);
var result = System.Convert.ToBase64String(binData);
new BlobHelper("STORENAMEHERE", "SECRETKEY").PutBlob("images", "test.jpg", result);
私のデータを符号化しています場所です。これは、私がデータを置くために使用しているものです、それはhttps://azurestoragesamples.codeplex.com/
public bool PutBlob(string container, string blob, string content)
{
return Retry<bool>(delegate()
{
HttpWebResponse response;
try
{
SortedList<string, string> headers = new SortedList<string, string>();
headers.Add("x-ms-blob-type", "BlockBlob");
response = CreateRESTRequest("PUT", container + "/" + blob, content, headers).GetResponse() as HttpWebResponse;
response.Close();
return true;
}
catch (WebException ex)
{
if (ex.Status == WebExceptionStatus.ProtocolError &&
ex.Response != null &&
(int)(ex.Response as HttpWebResponse).StatusCode == 409)
return false;
throw;
}
});
}
public HttpWebRequest CreateRESTRequest(string method, string resource, string requestBody = null, SortedList<string, string> headers = null,
string ifMatch = "", string md5 = "")
{
byte[] byteArray = null;
DateTime now = DateTime.UtcNow;
string uri = Endpoint + resource;
HttpWebRequest request = HttpWebRequest.Create(uri) as HttpWebRequest;
request.Method = method;
request.ContentLength = 0;
request.Headers.Add("x-ms-date", now.ToString("R", System.Globalization.CultureInfo.InvariantCulture));
request.Headers.Add("x-ms-version", "2009-09-19");
if (headers != null)
{
foreach (KeyValuePair<string, string> header in headers)
request.Headers.Add(header.Key, header.Value);
}
if (!String.IsNullOrEmpty(requestBody))
{
request.Headers.Add("Accept-Charset", "UTF-8");
byteArray = Encoding.UTF8.GetBytes(requestBody);
request.ContentLength = byteArray.Length;
}
request.Headers.Add("Authorization", AuthorizationHeader(method, now, request, ifMatch, md5));
if (!String.IsNullOrEmpty(requestBody))
request.GetRequestStream().Write(byteArray, 0, byteArray.Length);
return request;
}
サイズには関係ありませんが、リクエストのヘッダーには関係ありません。 'CreateRESTRequest()'を呼び出すコードを追加できますか? – vorou
@vorou OP updated – user3953989
22kから29kへのサイズの増加はおおよそ3:4なので、あなたはBase64エンコーディングがどこか2回あるように見えます。 – SBS