I am developing a web application that enable users to upload wav file and convert it to mp3. So far I can convert wav to mp3 and save it to the project folder. What I can't find is pass the wav file to api dynamically.
<div class="fileHolder">
<b-form-file v-model="fields.file" accept=".wav" id="test"></b-form-file>
</div>
wav file to mp3 convert
public Task<HttpResponseMessage> test()
{
string filename = null;
if (!Request.Content.IsMimeMultipartContent())
throw new HttpResponseException(HttpStatusCode.UnsupportedMediaType);
string rootPath = HttpContext.Current.Server.MapPath("~/Uploads");
var provider = new MultipartFileStreamProvider(rootPath);
var task = Request.Content.ReadAsMultipartAsync(provider).
ContinueWith<HttpResponseMessage>(t =>
{
uploadResult r = new uploadResult();
if (t.IsCanceled || t.IsFaulted)
{
Request.CreateErrorResponse(HttpStatusCode.InternalServerError, t.Exception);
}
foreach (MultipartFileData dataitem in provider.FileData)
{
try
{
//Replace / from file name
string name = dataitem.Headers.ContentDisposition.FileName.Replace("\"", "");
filename = name.Substring(name.LastIndexOf(@"\") + 1, name.Length);
//Create New file name using GUID to prevent duplicate file name
string newFileName = Guid.NewGuid() + Path.GetExtension(name);
string mp3FileName = Guid.NewGuid() + ".mp3";
//filename = newFileName;
//Move file from current location to target folder.
File.Move(dataitem.LocalFileName, Path.Combine(rootPath, newFileName));
//WavToMP3(Path.Combine(rootPath,newFileName), Path.Combine(rootPath,mp3FileName));
//File.Delete(Path.Combine(rootPath, newFileName));
r.fileName = mp3FileName;
}
catch (Exception ex)
{
string message = ex.Message;
}
}
r.result = "Ok";
return Request.CreateResponse(HttpStatusCode.Created, r);
});
return task;
}
public static void WavToMP3(string waveFileName, string mp3Filename, int bitRate = 128)
{
CheckAddBinPath();
using (var reader = new AudioFileReader(waveFileName))
using (var writer = new LameMP3FileWriter(mp3Filename, reader.WaveFormat, bitRate))
reader.CopyTo(writer);
}
Javascript Code:
function onSubmit() {
event.preventDefault();
var file = this.fields.file;
var fd = new FormData;
fd.append("file", file);
axios.post(`https://localhost:44324/api/G/test`, fd , {
headers: {
'Content-Type': 'multipart/form-data'
}
}).then(r => {});
}
The new problem is when I upload 5mb file or higher provider.Filedata
contains no data. But when the file is small there is data found on the provider
Can someone point me in the right direction?