add basic ability to upload images for items
This commit is contained in:
parent
055a6eb4cc
commit
00222c8493
|
@ -159,6 +159,25 @@ namespace MediaBrowser.Api.Images
|
||||||
/// <value>The request stream.</value>
|
/// <value>The request stream.</value>
|
||||||
public Stream RequestStream { get; set; }
|
public Stream RequestStream { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Route("/Items/{Id}/Images/{Type}", "POST")]
|
||||||
|
[Route("/Items/{Id}/Images/{Type}/{Index}", "POST")]
|
||||||
|
[Api(Description = "Posts an item image")]
|
||||||
|
public class PostItemImage : DeleteImageRequest, IRequiresRequestStream, IReturnVoid
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the id.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The id.</value>
|
||||||
|
[ApiMember(Name = "Id", Description = "Item Id", IsRequired = true, DataType = "string", ParameterType = "path", Verb = "POST")]
|
||||||
|
public string Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// The raw Http Request Input Stream
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The request stream.</value>
|
||||||
|
public Stream RequestStream { get; set; }
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Class ImageService
|
/// Class ImageService
|
||||||
|
@ -288,6 +307,24 @@ namespace MediaBrowser.Api.Images
|
||||||
Task.WaitAll(task);
|
Task.WaitAll(task);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Posts the specified request.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="request">The request.</param>
|
||||||
|
public void Post(PostItemImage request)
|
||||||
|
{
|
||||||
|
var pathInfo = PathInfo.Parse(RequestContext.PathInfo);
|
||||||
|
var id = new Guid(pathInfo.GetArgumentValue<string>(1));
|
||||||
|
|
||||||
|
request.Type = (ImageType)Enum.Parse(typeof(ImageType), pathInfo.GetArgumentValue<string>(3), true);
|
||||||
|
|
||||||
|
var item = _libraryManager.GetItemById(id);
|
||||||
|
|
||||||
|
var task = PostImage(item, request.RequestStream, request.Type, RequestContext.ContentType);
|
||||||
|
|
||||||
|
Task.WaitAll(task);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Deletes the specified request.
|
/// Deletes the specified request.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -197,7 +197,7 @@ namespace MediaBrowser.Controller.Providers
|
||||||
item.SetImage(ImageType.Thumb, image.FullName);
|
item.SetImage(ImageType.Thumb, image.FullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Thumbnail Image
|
// Box Image
|
||||||
image = GetImage(item, "box");
|
image = GetImage(item, "box");
|
||||||
|
|
||||||
if (image != null)
|
if (image != null)
|
||||||
|
@ -205,6 +205,14 @@ namespace MediaBrowser.Controller.Providers
|
||||||
item.SetImage(ImageType.Box, image.FullName);
|
item.SetImage(ImageType.Box, image.FullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// BoxRear Image
|
||||||
|
image = GetImage(item, "boxrear");
|
||||||
|
|
||||||
|
if (image != null)
|
||||||
|
{
|
||||||
|
item.SetImage(ImageType.BoxRear, image.FullName);
|
||||||
|
}
|
||||||
|
|
||||||
// Thumbnail Image
|
// Thumbnail Image
|
||||||
image = GetImage(item, "menu");
|
image = GetImage(item, "menu");
|
||||||
|
|
||||||
|
|
|
@ -455,6 +455,7 @@ namespace MediaBrowser.WebDashboard.Api
|
||||||
"boxsets.js",
|
"boxsets.js",
|
||||||
"clientsettings.js",
|
"clientsettings.js",
|
||||||
"dashboardpage.js",
|
"dashboardpage.js",
|
||||||
|
"edititemimages.js",
|
||||||
"edituserpage.js",
|
"edituserpage.js",
|
||||||
"gamesrecommendedpage.js",
|
"gamesrecommendedpage.js",
|
||||||
"gamesystemspage.js",
|
"gamesystemspage.js",
|
||||||
|
|
|
@ -839,6 +839,63 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) {
|
||||||
return deferred.promise();
|
return deferred.promise();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
self.uploadImage = function (itemId, imageType, file) {
|
||||||
|
|
||||||
|
if (!itemId) {
|
||||||
|
throw new Error("null itemId");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!imageType) {
|
||||||
|
throw new Error("null imageType");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!file) {
|
||||||
|
throw new Error("File must be an image.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (file.type != "image/png" && file.type != "image/jpeg" && file.type != "image/jpeg") {
|
||||||
|
throw new Error("File must be an image.");
|
||||||
|
}
|
||||||
|
|
||||||
|
var deferred = $.Deferred();
|
||||||
|
|
||||||
|
var reader = new FileReader();
|
||||||
|
|
||||||
|
reader.onerror = function () {
|
||||||
|
deferred.reject();
|
||||||
|
};
|
||||||
|
|
||||||
|
reader.onabort = function () {
|
||||||
|
deferred.reject();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Closure to capture the file information.
|
||||||
|
reader.onload = function (e) {
|
||||||
|
|
||||||
|
var data = window.btoa(e.target.result);
|
||||||
|
|
||||||
|
var url = self.getUrl("Items/" + itemId + "/Images/" + imageType);
|
||||||
|
|
||||||
|
self.ajax({
|
||||||
|
type: "POST",
|
||||||
|
url: url,
|
||||||
|
data: data,
|
||||||
|
contentType: "image/" + file.name.substring(file.name.lastIndexOf('.') + 1)
|
||||||
|
}).done(function (result) {
|
||||||
|
|
||||||
|
deferred.resolveWith(null, [result]);
|
||||||
|
|
||||||
|
}).fail(function () {
|
||||||
|
deferred.reject();
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Read in the image file as a data URL.
|
||||||
|
reader.readAsBinaryString(file);
|
||||||
|
|
||||||
|
return deferred.promise();
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Gets the list of installed plugins on the server
|
* Gets the list of installed plugins on the server
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -210,6 +210,9 @@
|
||||||
<Content Include="dashboard-ui\css\userimage.css">
|
<Content Include="dashboard-ui\css\userimage.css">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="dashboard-ui\edititemimages.html">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="dashboard-ui\gamegenres.html">
|
<Content Include="dashboard-ui\gamegenres.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
@ -270,6 +273,9 @@
|
||||||
<Content Include="dashboard-ui\musicrecommended.html">
|
<Content Include="dashboard-ui\musicrecommended.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="dashboard-ui\scripts\edititemimages.js">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="dashboard-ui\scripts\musicrecommended.js">
|
<Content Include="dashboard-ui\scripts\musicrecommended.js">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.93" targetFramework="net45" />
|
<package id="MediaBrowser.ApiClient.Javascript" version="3.0.94" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Common" version="3.9.43" targetFramework="net45" />
|
<package id="ServiceStack.Common" version="3.9.43" targetFramework="net45" />
|
||||||
<package id="ServiceStack.Text" version="3.9.43" targetFramework="net45" />
|
<package id="ServiceStack.Text" version="3.9.43" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
Loading…
Reference in New Issue
Block a user