由于Azure要求,使用RTM版本,Framework 4
代码在Azure模拟器上运行时出错 – 我怀疑问题与路径/环境变量有关.
Azure Web角色失败,出现404错误
代码在Azure模拟器上运行时出错 – 我怀疑问题与路径/环境变量有关.
Azure Web角色失败,出现404错误
这是控制器代码:
[ValidateInput(false)] public HttpResponseMessage Post() { try { if (!Request.Content.IsMimeMultipartContent("form-data")) { throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType); } string tempPath = RoleEnvironment.GetLocalResource("tempStorage").RootPath; Environment.SetEnvironmentVariable("TEMP",tempPath); Environment.SetEnvironmentVariable("TMP",tempPath); string Host = "test"; string StorageConnection = "credentials here"; string Product = "Product"; string CompanyID = "Company"; DocStorage docStorage = new DocStorage(Host,Product,CompanyID,StorageConnection); var multipartStreamProvider = new AzureBlobStorageMultipartProvider(docStorage.BlobContainer,tempPath); Stream reqStream = Request.Content.ReadAsStreamAsync().Result; if (reqStream.CanSeek) { reqStream.Position = 0; } Request.Content.ReadAsMultipartAsync<AzureBlobStorageMultipartProvider>(multipartStreamProvider).ContinueWith<List<FileDetails>>(t => { if (t.IsFaulted) { throw t.Exception; } AzureBlobStorageMultipartProvider provider = t.Result; foreach (var fileData in provider.FileData) { string fileName = Path.GetFileName(fileData.Headers.ContentDisposition.FileName.Trim('"')); string fileNameBlob = Path.GetFileName(fileData.LocalFileName.Trim('"')); CloudBlob blob = docStorage.BlobContainer.GetBlobReference(fileNameBlob); if (!string.IsNullOrEmpty(provider.FormData["company"])) blob.Metadata[AriettDocStorage.FileNameFileLocation] = provider.FormData["company"]; blob.SetMetadata(); } return provider.Files; }); return new HttpResponseMessage(HttpStatusCode.OK); } catch { return new HttpResponseMessage(HttpStatusCode.NotFound); } }
这是覆盖
public class AzureBlobStorageMultipartProvider : MultipartFormDataStreamProvider { public CloudBlobContainer Container; public AzureBlobStorageMultipartProvider(CloudBlobContainer container,string tempPath) : base(tempPath) { Container = container; } public override Task ExecutePostProcessingAsync() { // Upload the files to azure blob storage and remove them from local disk foreach (var fileData in this.FileData) { string fileName = Path.GetFileName(fileData.Headers.ContentDisposition.FileName.Trim('"')); // Retrieve reference to a blob string fileNameBlob = Path.GetFileName(fileData.LocalFileName.Trim('"')); CloudBlob blob = Container.GetBlobReference(fileNameBlob); blob.Properties.ContentType = fileData.Headers.ContentType.MediaType; blob.UploadFile(fileData.LocalFileName); blob.SetProperties(); File.Delete(fileData.LocalFileName); Files.Add(new FileDetails { ContentType = blob.Properties.ContentType,Name = blob.Name,Size = blob.Properties.Length,Location = blob.Uri.AbsoluteUri }); } return base.ExecutePostProcessingAsync(); }
解决方法
我解决了这个问题,这是一些小事,与路径无关,这是正确完成的.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。