0
要使用ByteArrayContent
对HttpClient
上传文件,我正在将StorageFile
读入byte
阵列。该代码工作没有问题的图像,但它不适用于通过AudioVideoCaptureDevice
生成的文件 - 即使通过文件不是空的,我仔细检查。 * 它会访问该文件以任何方式:将文件读入字节数组时出现System.ArgumentException
byte[] data;
StorageFolder folder = ApplicationData.Current.LocalFolder;
try {
Debug.WriteLine("uploading: "+ fileName);
StorageFile file = await folder.GetFileAsync("data\\"+LocalPayload);
var probs = await file.GetBasicPropertiesAsync();
Debug.WriteLine("path " + file.Path + "" + " size " + probs.Size);
try
{
var stream = await file.OpenReadAsync();
using (var dataReader = new DataReader(stream))
{
Debug.WriteLine("stream size is " + stream.Size);
data = new byte[stream.Size];
await dataReader.LoadAsync((uint)stream.Size);
dataReader.ReadBytes(data);
}
Debug.WriteLine("stream was read");
content = new ByteArrayContent(data);
}
catch (System.IO.FileNotFoundException e)
{
Debug.WriteLine("file not found", e.ToString());
return;
}
catch (Exception e)
{
Debug.WriteLine("could not create byte array for file: " + e.ToString());
return;
}
}
catch (Exception e)
{
Debug.WriteLine("could not read file: " + e.ToString());
return;
}
这是例外
could not read file: System.ArgumentException: Value does not fall within the expected range.
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter`1.GetResult()
at TestApp.Models.Item.<Upload>d__1f.MoveNext()
捕捉到我我先用录制的声音文件
IStorageFolder applicationFolder = ApplicationData.Current.LocalFolder;
var dataFolder = await applicationFolder.CreateFolderAsync("data", CreationCollisionOption.OpenIfExists);
outputFile = await dataFolder.CreateFileAsync(audioFileName, CreationCollisionOption.ReplaceExisting);
stream = await outputFile.OpenAsync(FileAccessMode.ReadWrite);
await dev.StartRecordingToStreamAsync(stream);
并在一些用户互动后,我打电话
await dev.StopRecordingAsync();
Debug.WriteLine("stopped recording");
await stream.FlushAsync();
stream.Dispose();
任何建议为什么有些文件正在工作,有些则不是?
谢谢!
UPDATE添加的代码创建的文件和文件夹
源UPDATE2添加代码周围的try catch来读取文件大小
文件是否已关闭?这种情况下stream.Size的大小是多少? – Oren
它似乎与使用await方法和编译器生成的代码有关。尝试为它提供更大尺寸的文件以查看它是否在一定尺寸后切断。你有没有行号?可能有助于使事情变得更清楚,至此消息似乎主要是编译器生成的函数。尝试捕捉异常并打印所有的细节。 – Pharap
如何获得'文件夹'? –