[backend/drive] Set content-type when uploading media to object storage
This commit is contained in:
parent
922a759fb1
commit
16fdc48800
3 changed files with 14 additions and 11 deletions
|
@ -216,7 +216,7 @@ public class DriveService(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data.Seek(0, SeekOrigin.Begin);
|
data.Seek(0, SeekOrigin.Begin);
|
||||||
await storageSvc.UploadFileAsync(filename, data);
|
await storageSvc.UploadFileAsync(filename, request.MimeType, data);
|
||||||
url = storageSvc.GetFilePublicUrl(filename).AbsoluteUri;
|
url = storageSvc.GetFilePublicUrl(filename).AbsoluteUri;
|
||||||
|
|
||||||
if (thumbnailFilename != null && res?.RenderThumbnail != null)
|
if (thumbnailFilename != null && res?.RenderThumbnail != null)
|
||||||
|
@ -226,7 +226,7 @@ public class DriveService(
|
||||||
await using var stream = new MemoryStream();
|
await using var stream = new MemoryStream();
|
||||||
await res.RenderThumbnail(stream);
|
await res.RenderThumbnail(stream);
|
||||||
stream.Seek(0, SeekOrigin.Begin);
|
stream.Seek(0, SeekOrigin.Begin);
|
||||||
await storageSvc.UploadFileAsync(thumbnailFilename, stream);
|
await storageSvc.UploadFileAsync(thumbnailFilename, "image/webp", stream);
|
||||||
thumbnailUrl = storageSvc.GetFilePublicUrl(thumbnailFilename).AbsoluteUri;
|
thumbnailUrl = storageSvc.GetFilePublicUrl(thumbnailFilename).AbsoluteUri;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -242,7 +242,7 @@ public class DriveService(
|
||||||
await using var stream = new MemoryStream();
|
await using var stream = new MemoryStream();
|
||||||
await res.RenderWebpublic(stream);
|
await res.RenderWebpublic(stream);
|
||||||
stream.Seek(0, SeekOrigin.Begin);
|
stream.Seek(0, SeekOrigin.Begin);
|
||||||
await storageSvc.UploadFileAsync(webpublicFilename, stream);
|
await storageSvc.UploadFileAsync(webpublicFilename, "image/webp", stream);
|
||||||
webpublicUrl = storageSvc.GetFilePublicUrl(webpublicFilename).AbsoluteUri;
|
webpublicUrl = storageSvc.GetFilePublicUrl(webpublicFilename).AbsoluteUri;
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
|
@ -267,7 +267,7 @@ public class DriveService(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data.Seek(0, SeekOrigin.Begin);
|
data.Seek(0, SeekOrigin.Begin);
|
||||||
await storageSvc.UploadFileAsync(filename, data);
|
await storageSvc.UploadFileAsync(filename, request.MimeType, data);
|
||||||
url = storageSvc.GetFilePublicUrl(filename).AbsoluteUri;
|
url = storageSvc.GetFilePublicUrl(filename).AbsoluteUri;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,7 +61,7 @@ public class ObjectStorageService(IOptions<Config.StorageSection> config, HttpCl
|
||||||
const string filename = ".iceshrimp-test";
|
const string filename = ".iceshrimp-test";
|
||||||
var content = CryptographyHelpers.GenerateRandomString(16);
|
var content = CryptographyHelpers.GenerateRandomString(16);
|
||||||
|
|
||||||
await UploadFileAsync(filename, Encoding.UTF8.GetBytes(content));
|
await UploadFileAsync(filename, "text/plain", Encoding.UTF8.GetBytes(content));
|
||||||
|
|
||||||
string result;
|
string result;
|
||||||
try
|
try
|
||||||
|
@ -78,12 +78,15 @@ public class ObjectStorageService(IOptions<Config.StorageSection> config, HttpCl
|
||||||
throw new Exception("Failed to verify access url (content mismatch)");
|
throw new Exception("Failed to verify access url (content mismatch)");
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task UploadFileAsync(string filename, byte[] data) => UploadFileAsync(filename, new MemoryStream(data));
|
private Task UploadFileAsync(string filename, string contentType, byte[] data) =>
|
||||||
|
UploadFileAsync(filename, contentType, new MemoryStream(data));
|
||||||
|
|
||||||
public async Task UploadFileAsync(string filename, Stream data)
|
public async Task UploadFileAsync(string filename, string contentType, Stream data)
|
||||||
{
|
{
|
||||||
if (_bucket == null) throw new Exception("Refusing to upload to object storage with invalid configuration");
|
if (_bucket == null) throw new Exception("Refusing to upload to object storage with invalid configuration");
|
||||||
var blob = new Blob(GetFilenameWithPrefix(filename), data, _acl ?? BlobProperties.Empty);
|
var properties = (_acl ?? BlobProperties.Empty).ToDictionary();
|
||||||
|
properties.Add("Content-Type", contentType);
|
||||||
|
var blob = new Blob(GetFilenameWithPrefix(filename), data, properties);
|
||||||
await _bucket.PutAsync(blob);
|
await _bucket.PutAsync(blob);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ public class StorageMaintenanceService(
|
||||||
var path = Path.Join(pathBase, file.AccessKey);
|
var path = Path.Join(pathBase, file.AccessKey);
|
||||||
var stream = File.OpenRead(path);
|
var stream = File.OpenRead(path);
|
||||||
|
|
||||||
await objectStorageSvc.UploadFileAsync(file.AccessKey, stream);
|
await objectStorageSvc.UploadFileAsync(file.AccessKey, file.Type, stream);
|
||||||
file.Url = objectStorageSvc.GetFilePublicUrl(file.AccessKey).AbsoluteUri;
|
file.Url = objectStorageSvc.GetFilePublicUrl(file.AccessKey).AbsoluteUri;
|
||||||
pathsToDelete.Add(path);
|
pathsToDelete.Add(path);
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@ public class StorageMaintenanceService(
|
||||||
var path = Path.Join(pathBase, file.ThumbnailAccessKey);
|
var path = Path.Join(pathBase, file.ThumbnailAccessKey);
|
||||||
var stream = File.OpenRead(path);
|
var stream = File.OpenRead(path);
|
||||||
|
|
||||||
await objectStorageSvc.UploadFileAsync(file.ThumbnailAccessKey, stream);
|
await objectStorageSvc.UploadFileAsync(file.ThumbnailAccessKey, "image/webp", stream);
|
||||||
file.ThumbnailUrl = objectStorageSvc.GetFilePublicUrl(file.ThumbnailAccessKey).AbsoluteUri;
|
file.ThumbnailUrl = objectStorageSvc.GetFilePublicUrl(file.ThumbnailAccessKey).AbsoluteUri;
|
||||||
pathsToDelete.Add(path);
|
pathsToDelete.Add(path);
|
||||||
}
|
}
|
||||||
|
@ -75,7 +75,7 @@ public class StorageMaintenanceService(
|
||||||
var path = Path.Join(pathBase, file.WebpublicAccessKey);
|
var path = Path.Join(pathBase, file.WebpublicAccessKey);
|
||||||
var stream = File.OpenRead(path);
|
var stream = File.OpenRead(path);
|
||||||
|
|
||||||
await objectStorageSvc.UploadFileAsync(file.WebpublicAccessKey, stream);
|
await objectStorageSvc.UploadFileAsync(file.WebpublicAccessKey, "image/webp", stream);
|
||||||
file.WebpublicUrl = objectStorageSvc.GetFilePublicUrl(file.WebpublicAccessKey).AbsoluteUri;
|
file.WebpublicUrl = objectStorageSvc.GetFilePublicUrl(file.WebpublicAccessKey).AbsoluteUri;
|
||||||
pathsToDelete.Add(path);
|
pathsToDelete.Add(path);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue